Changeset 374 for asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet
- Timestamp:
- Apr 5, 2019, 9:26:53 PM (5 years ago)
- Location:
- asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netdev
- Files:
-
- 2 deleted
- 4 edited
- 4 moved
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netdev/if_btusb/Makefile.tinet
r352 r374 42 42 INCLUDES := $(INCLUDES) -I$(TINET_ROOT)/netdev/$(NET_DEV) 43 43 TINET_DIRS := $(TINET_DIRS):$(TINET_ROOT)/netdev/$(NET_DEV) 44 TINET_COBJS := $(TINET_COBJS) nap_main.o panu_main.o if_btusb.o44 TINET_COBJS := $(TINET_COBJS) bt_main.o if_btusb.o 45 45 TINET_KERNEL_CFG := $(TINET_KERNEL_CFG) $(TINET_ROOT)/netdev/$(NET_DEV)/if_btusb.cfg -
asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.c
r373 r374 58 58 #include "sdp.h" 59 59 #include "pan.h" 60 #include "panu_main.h" 60 #include "bt_main.h" 61 #include "usb_hbth.h" 61 62 62 63 //#define PACKET_DUMP … … 66 67 67 68 #define RFCOMM_SERVER_CHANNEL 1 68 /*static*/uint16_t rfcomm_channel_id = FAILED_RFCOMM_ID_NOT_SET;69 static uint16_t rfcomm_channel_id = FAILED_RFCOMM_ID_NOT_SET; 69 70 70 71 static int record_id = -1; … … 90 91 91 92 volatile int bt_bnep_mode = 0; 92 bool_t bt_enabled = false; 93 94 enum bt_state_t { 95 BT_STATE_DORMANT, 96 BT_STATE_POWER_ON, 97 BT_STATE_BNEP_QUERY, 98 BT_STATE_BNEP_WAIT, 99 BT_STATE_BNEP_QUERY_WAIT, 100 BT_STATE_CONNECTING, 101 BT_STATE_CONNECTED, 102 }; 103 104 enum bt_state_t bt_state = BT_STATE_DORMANT; 105 int bt_timer; 93 106 94 107 // outgoing network packet … … 108 121 break; 109 122 case DE_SIZE_VAR_16: 110 len = READ_NET_16(element, 1);123 len = big_endian_read_16(element, 1); 111 124 break; 112 125 default: … … 129 142 130 143 // accept first entry or if we foudn a NAP and only have a PANU yet 131 if ((bnep_remote_uuid == 0) || (sdp_bnep_remote_uuid == B NEP_UUID_NAP && bnep_remote_uuid == BNEP_UUID_PANU)) {144 if ((bnep_remote_uuid == 0) || (sdp_bnep_remote_uuid == BLUETOOTH_SERVICE_CLASS_NAP && bnep_remote_uuid == BLUETOOTH_SERVICE_CLASS_PANU)) { 132 145 bnep_l2cap_psm = sdp_bnep_l2cap_psm; 133 146 bnep_remote_uuid = sdp_bnep_remote_uuid; … … 146 159 147 160 switch (event->type) { 148 case SDP_ QUERY_ATTRIBUTE_VALUE:161 case SDP_EVENT_QUERY_ATTRIBUTE_VALUE: 149 162 value_event = (sdp_query_attribute_value_event_t*)event; 150 163 … … 165 178 166 179 switch (value_event->attribute_id) { 167 case SDP_ServiceClassIDList:180 case BLUETOOTH_ATTRIBUTE_SERVICE_CLASS_ID_LIST: 168 181 if (de_get_element_type(attribute_value) != DE_DES) break; 169 182 for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) { … … 172 185 uint32_t uuid = de_get_uuid32(element); 173 186 switch (uuid) { 174 case B NEP_UUID_PANU:175 case B NEP_UUID_NAP:176 case B NEP_UUID_GN:187 case BLUETOOTH_SERVICE_CLASS_PANU: 188 case BLUETOOTH_SERVICE_CLASS_NAP: 189 case BLUETOOTH_SERVICE_CLASS_GN: 177 190 log_info("SDP Attribute 0x%04x: BNEP PAN protocol UUID: %04x", value_event->attribute_id, uuid); 178 191 sdp_bnep_remote_uuid = uuid; … … 192 205 free(str); 193 206 break; 194 case SDP_ProtocolDescriptorList: {207 case BLUETOOTH_ATTRIBUTE_PROTOCOL_DESCRIPTOR_LIST: { 195 208 log_info("SDP Attribute: 0x%04x", value_event->attribute_id); 196 209 … … 210 223 uuid = de_get_uuid32(element); 211 224 switch (uuid) { 212 case SDP_L2CAPProtocol:225 case BLUETOOTH_PROTOCOL_L2CAP: 213 226 if (!des_iterator_has_more(&prot_it)) continue; 214 227 des_iterator_next(&prot_it); 215 228 de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_l2cap_psm); 216 229 break; 217 case SDP_BNEPProtocol:230 case BLUETOOTH_PROTOCOL_BNEP: 218 231 if (!des_iterator_has_more(&prot_it)) continue; 219 232 des_iterator_next(&prot_it); … … 238 251 break; 239 252 240 case SDP_ QUERY_COMPLETE:253 case SDP_EVENT_QUERY_COMPLETE: 241 254 handle_sdp_client_record_complete(); 242 255 complete_event = (sdp_query_complete_event_t*)event; … … 246 259 } 247 260 else { 261 bnep_do_connect = false; 248 262 log_error("No BNEP service found"); 263 } 264 if (!bnep_do_connect) { 265 // 20秒後 BNEP Query 開始 266 bt_state = BT_STATE_BNEP_QUERY_WAIT; 267 bt_timer = 20 * 1000; 249 268 } 250 269 break; … … 269 288 if (packet[2] == HCI_STATE_WORKING) { 270 289 hci_send_cmd(&hci_write_local_name, bt_localname); 271 /* Send a general query for BNEP Protocol ID */ 272 log_info("Start SDP BNEP query."); 273 sdp_general_query_for_uuid(remote_addr, SDP_BNEPProtocol); 290 if (bt_bnep_mode == 0) { 291 // 即時 BNEP Query 開始 292 bt_state = BT_STATE_BNEP_QUERY_WAIT; 293 bt_timer = 0; 294 } 295 else { 296 bt_state = BT_STATE_BNEP_WAIT; 297 bt_timer = -1; 298 } 274 299 } 275 300 break; … … 284 309 285 310 case HCI_EVENT_COMMAND_COMPLETE: 286 if ( COMMAND_COMPLETE_EVENT(packet, hci_read_bd_addr)) {287 bt_flip_addr(event_addr, &packet[6]);311 if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_bd_addr)) { 312 reverse_bd_addr(&packet[6], event_addr); 288 313 log_info("BD-ADDR: %s", bd_addr_to_str(event_addr)); 289 314 … … 292 317 break; 293 318 } 294 if ( COMMAND_COMPLETE_EVENT(packet, hci_write_local_name)) {295 hci_discoverable_control(1);319 if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_write_local_name)) { 320 gap_discoverable_control(1); 296 321 break; 297 322 } … … 301 326 // deny link key request 302 327 log_info("Link key request"); 303 bt_flip_addr(event_addr, &packet[2]);328 reverse_bd_addr(&packet[2], event_addr); 304 329 hci_send_cmd(&hci_link_key_request_negative_reply, &event_addr); 305 330 break; … … 308 333 // inform about pin code request 309 334 log_info("Pin code request - using '0000'"); 310 bt_flip_addr(event_addr, &packet[2]);335 reverse_bd_addr(&packet[2], event_addr); 311 336 hci_send_cmd(&hci_pin_code_request_reply, &event_addr, 4, "0000"); 312 337 break; … … 314 339 case HCI_EVENT_USER_CONFIRMATION_REQUEST: 315 340 // inform about user confirmation request 316 log_info("HCI User Confirmation Request with numeric value '%06u'", READ_BT_32(packet, 8));341 log_info("HCI User Confirmation Request with numeric value '%06u'", little_endian_read_32(packet, 8)); 317 342 log_info("HCI User Confirmation Auto accept"); 318 343 break; … … 320 345 case RFCOMM_EVENT_INCOMING_CONNECTION: 321 346 // data: event (8), len(8), address(48), channel (8), rfcomm_cid (16) 322 bt_flip_addr(event_addr, &packet[2]);347 reverse_bd_addr(&packet[2], event_addr); 323 348 rfcomm_channel_nr = packet[8]; 324 rfcomm_channel_id = READ_BT_16(packet, 9);349 rfcomm_channel_id = little_endian_read_16(packet, 9); 325 350 log_info("RFCOMM channel %u requested for %s", rfcomm_channel_nr, bd_addr_to_str(event_addr)); 326 351 rfcomm_accept_connection_internal(rfcomm_channel_id); … … 333 358 } 334 359 else { 335 rfcomm_channel_id = READ_BT_16(packet, 12);336 mtu = READ_BT_16(packet, 14);360 rfcomm_channel_id = little_endian_read_16(packet, 12); 361 mtu = little_endian_read_16(packet, 14); 337 362 log_info("RFCOMM channel open succeeded. New RFCOMM Channel ID %u, max frame size %u", rfcomm_channel_id, mtu); 338 363 } … … 347 372 if (packet[2]) { 348 373 log_info("BNEP channel open failed, status %02x", packet[2]); 374 375 // 30秒後 BNEP Query 開始 376 bt_state = BT_STATE_BNEP_QUERY_WAIT; 377 bt_timer = 30 * 1000; 349 378 } 350 379 else { 351 380 // data: event(8), len(8), status (8), bnep source uuid (16), bnep destination uuid (16), remote_address (48) 352 bnep_cid = READ_BT_16(packet, 3);353 uuid_source = READ_BT_16(packet, 5);354 uuid_dest = READ_BT_16(packet, 7);355 mtu = READ_BT_16(packet, 9);356 // bt_flip_addr(remote_addr, &packet[11]);381 bnep_cid = little_endian_read_16(packet, 3); 382 uuid_source = little_endian_read_16(packet, 5); 383 uuid_dest = little_endian_read_16(packet, 7); 384 mtu = little_endian_read_16(packet, 9); 385 //reverse_bd_addr(&packet[11], remote_addr); 357 386 memcpy(&remote_addr, &packet[11], sizeof(bd_addr_t)); 358 387 log_info("BNEP connection open succeeded to %s source UUID 0x%04x dest UUID: 0x%04x, max frame size %u", bd_addr_to_str(event_addr), uuid_source, uuid_dest, mtu); … … 360 389 btstack_network_up(bnep_cid, (uint8_t *)hci_local_bd_addr(), (uint8_t *)remote_addr); 361 390 log_info("Network Interface %s activated", btstack_network_get_name(bnep_cid)); 391 392 bt_state = BT_STATE_CONNECTED; 393 bt_timer = -1; 362 394 } 363 395 break; … … 368 400 369 401 case BNEP_EVENT_CHANNEL_CLOSED: 370 bnep_cid = READ_BT_16(packet, 2);402 bnep_cid = little_endian_read_16(packet, 2); 371 403 bt_channel_closed(bnep_cid); 404 405 // 30秒後 BNEP Query 開始 406 bt_state = BT_STATE_BNEP_QUERY_WAIT; 407 bt_timer = 30 * 1000; 372 408 break; 373 409 374 410 case BNEP_EVENT_READY_TO_SEND: 375 bnep_cid = READ_BT_16(packet, 2);411 bnep_cid = little_endian_read_16(packet, 2); 376 412 bt_send_packet(bnep_cid); 377 413 break; … … 428 464 } 429 465 430 void panu_init(void)466 void bt_init(void) 431 467 { 432 468 const hci_transport_t *transport; … … 437 473 service_record_item_t *bnep_service_record_item; 438 474 475 btstack_network_init(&network_send_packet_callback); 476 439 477 //hci_dump_open("", HCI_DUMP_PACKETLOGGER); 440 441 log_info("bt初期化...");442 478 443 479 // start with BTstack init - especially configure HCI Transport … … 446 482 447 483 /* Initialize HCI */ 448 log_info("HCI初期化...");449 484 transport = hci_transport_usb_instance(); 450 485 control = NULL; … … 455 490 456 491 /* Initialize L2CAP */ 457 log_info("L2CAP初期化...");458 492 l2cap_init(); 459 493 l2cap_register_packet_handler(packet_handler); 460 494 461 495 /* Initialise SDP, create record for SPP and register with SDP */ 462 log_info("SDP初期化...");463 496 sdp_init(); 464 497 465 498 /* Initialize RFCOMM */ 466 log_info("RFCOMM初期化...");467 499 rfcomm_init(); 468 500 rfcomm_register_packet_handler(packet_handler); … … 470 502 471 503 /* Initialise BNEP */ 472 log_info("BNEP初期化...");473 504 bnep_init(); 474 505 bnep_register_packet_handler(packet_handler); 475 bnep_register_service(NULL, BNEP_UUID_PANU, BNEP_MTU_MIN); /* Minimum L2CAP MTU for bnep is 1691 bytes */ 506 if (bt_bnep_mode == 0) { 507 bnep_register_service(NULL, BLUETOOTH_SERVICE_CLASS_PANU, BNEP_MTU_MIN); /* Minimum L2CAP MTU for bnep is 1691 bytes */ 508 } 509 else { 510 bnep_register_service(NULL, BLUETOOTH_SERVICE_CLASS_NAP, BNEP_MTU_MIN); /* Minimum L2CAP MTU for bnep is 1691 bytes */ 511 } 476 512 477 513 memset(spp_service_buffer, 0, sizeof(spp_service_buffer)); … … 482 518 bnep_service_record_item = (service_record_item_t *)bnep_service_buffer; 483 519 484 log_info("SPPサービス登録...");485 520 sdp_create_spp_service((uint8_t*)&spp_service_record_item->service_record, 1, "RX SPP"); 486 521 de_dump_data_element((uint8_t*)spp_service_record_item->service_record); … … 488 523 sdp_register_service_internal(NULL, spp_service_record_item); 489 524 490 log_info("BNEPサービス登録..."); 491 pan_create_panu_service((uint8_t*)&bnep_service_record_item->service_record, "RX PANU", "RX PANU", BNEP_SECURITY_NONE); 492 de_dump_data_element((uint8_t*)bnep_service_record_item->service_record); 493 log_info("PANU SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record))); 525 if (bt_bnep_mode == 0) { 526 pan_create_panu_service((uint8_t*)&bnep_service_record_item->service_record, "RX PANU", "RX PANU", BNEP_SECURITY_NONE); 527 de_dump_data_element((uint8_t*)bnep_service_record_item->service_record); 528 log_info("PANU SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record))); 529 } 530 else { 531 pan_create_nap_service((uint8_t*)&bnep_service_record_item->service_record, "RX NAP", "RX NAP", BNEP_SECURITY_NONE, 532 PAN_NET_ACCESS_TYPE_100MB_ETHERNET, 0x0001312D0/*10Mb/sec*/, NULL, NULL); 533 de_dump_data_element((uint8_t*)bnep_service_record_item->service_record); 534 log_info("NAP SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record))); 535 } 494 536 sdp_register_service_internal(NULL, bnep_service_record_item); 495 537 … … 500 542 501 543 /* Turn on the device */ 502 log_info("HCI電源ON...");503 544 hci_power_control(HCI_POWER_ON); 504 545 … … 506 547 sdp_parser_init(); 507 548 sdp_parser_register_callback(handle_sdp_client_query_result); 508 } 509 510 void nap_init(void); 511 512 void bt_init(void) 513 { 514 btstack_network_init(&network_send_packet_callback); 515 516 if (bt_bnep_mode == 0) { 517 panu_init(); 518 } 519 else { 520 nap_init(); 521 } 522 523 bt_enabled = true; 524 } 525 526 void bt_task(void) 527 { 528 extern void hal_tick_handler(); 529 530 if (bt_enabled) { 531 hal_tick_handler(); 549 550 bt_state = BT_STATE_POWER_ON; 551 bt_timer = -1; 552 } 553 554 void bt_process(void) 555 { 556 if (bt_state != BT_STATE_DORMANT) { 532 557 run_loop_execute(); 533 558 bt_send_packet(0xffff); 559 } 560 561 if (bt_timer != 0) 562 return; 563 564 switch (bt_state) { 565 case BT_STATE_BNEP_QUERY_WAIT: 566 /* Send a general query for BNEP Protocol ID */ 567 log_info("Start SDP BNEP query."); 568 sdp_general_query_for_uuid(remote_addr, BLUETOOTH_PROTOCOL_BNEP); 569 570 bt_state = BT_STATE_BNEP_QUERY; 571 bt_timer = -1; 572 break; 573 default: 574 bt_timer = -1; 575 break; 534 576 } 535 577 } … … 592 634 hci_close(); 593 635 594 bt_enabled = false; 595 } 636 bt_state = BT_STATE_DORMANT; 637 bt_timer = -1; 638 } 639 640 void bt_task_on_start(struct task_if_t *task, ID tskid) 641 { 642 } 643 644 void bt_task_on_end(struct task_if_t *task) 645 { 646 } 647 648 int bt_task_get_timer(struct task_if_t *task) 649 { 650 return bt_timer; 651 } 652 653 void bt_task_progress(struct task_if_t *task, int elapse) 654 { 655 if (bt_timer == -1) 656 return; 657 658 bt_timer -= elapse; 659 if (bt_timer < 0) 660 bt_timer = 0; 661 } 662 663 void bt_task_process(struct task_if_t *task, enum task_event_t event) 664 { 665 extern void hal_tick_handler(); 666 667 switch (event & ~TASK_EVENT_TICK) { 668 case TASK_EVENT_START: 669 bt_init(); 670 break; 671 case TASK_EVENT_TERMINATE: 672 bt_terminate(); 673 break; 674 case TASK_EVENT_WAKEUP: 675 case TASK_EVENT_TIMEOUT: 676 if (event & TASK_EVENT_TICK) 677 hal_tick_handler(); 678 bt_process(); 679 break; 680 } 681 } 682 683 struct task_if_t bt_task = { 684 bt_task_on_start, 685 bt_task_on_end, 686 bt_task_get_timer, 687 bt_task_progress, 688 bt_task_process, 689 }; -
asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netdev/if_btusb/bt_main.h
r373 r374 1 1 /* 2 * panu_main.h2 * bt_main.h 3 3 * 4 4 */ … … 16 16 17 17 void bt_init(void); 18 void bt_task(void);19 18 int bt_can_send_packet(void); 20 19 void bt_send_packet(uint16_t bnep_cid); -
asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netdev/if_btusb/if_btusb.c
r369 r374 79 79 #include "kernel/kernel_impl.h" 80 80 #include "btstack/utils.h" 81 #include " panu_main.h"81 #include "bt_main.h" 82 82 #include "usb_hbth.h" 83 83 //#include "hal_cpu.h" … … 691 691 } 692 692 693 static int usb_acl_out_active = 0;694 static int usb_command_active = 0;695 696 static int usb_can_send_packet_now(uint8_t packet_type)697 {698 switch (packet_type) {699 case HCI_COMMAND_DATA_PACKET:700 return !usb_command_active;701 case HCI_ACL_DATA_PACKET:702 return !usb_acl_out_active;703 default:704 return 0;705 }706 }707 708 693 // single instance 709 694 static const hci_transport_t hci_transport_usb = -
asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netdev/if_enbt/Makefile.tinet
r352 r374 37 37 INCLUDES := $(INCLUDES) -I$(TINET_ROOT)/netdev/$(NET_DEV) 38 38 TINET_DIRS := $(TINET_DIRS):$(TINET_ROOT)/netdev/$(NET_DEV) 39 TINET_COBJS := $(TINET_COBJS) if_mbed.o if_btusb.o panu_main.o nap_main.o39 TINET_COBJS := $(TINET_COBJS) if_mbed.o if_btusb.o bt_main.o 40 40 TINET_KERNEL_CFG := $(TINET_KERNEL_CFG) $(TINET_ROOT)/netdev/$(NET_DEV)/if_mbed.cfg -
asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netdev/if_enbt/bt_main.c
r373 r374 58 58 #include "sdp.h" 59 59 #include "pan.h" 60 #include "panu_main.h" 60 #include "bt_main.h" 61 #include "usb_hbth.h" 61 62 62 63 //#define PACKET_DUMP … … 66 67 67 68 #define RFCOMM_SERVER_CHANNEL 1 68 /*static*/uint16_t rfcomm_channel_id = FAILED_RFCOMM_ID_NOT_SET;69 static uint16_t rfcomm_channel_id = FAILED_RFCOMM_ID_NOT_SET; 69 70 70 71 static int record_id = -1; … … 90 91 91 92 volatile int bt_bnep_mode = 0; 92 bool_t bt_enabled = false; 93 94 enum bt_state_t { 95 BT_STATE_DORMANT, 96 BT_STATE_POWER_ON, 97 BT_STATE_BNEP_QUERY, 98 BT_STATE_BNEP_WAIT, 99 BT_STATE_BNEP_QUERY_WAIT, 100 BT_STATE_CONNECTING, 101 BT_STATE_CONNECTED, 102 }; 103 104 enum bt_state_t bt_state = BT_STATE_DORMANT; 105 int bt_timer; 93 106 94 107 // outgoing network packet … … 108 121 break; 109 122 case DE_SIZE_VAR_16: 110 len = READ_NET_16(element, 1);123 len = big_endian_read_16(element, 1); 111 124 break; 112 125 default: … … 129 142 130 143 // accept first entry or if we foudn a NAP and only have a PANU yet 131 if ((bnep_remote_uuid == 0) || (sdp_bnep_remote_uuid == B NEP_UUID_NAP && bnep_remote_uuid == BNEP_UUID_PANU)) {144 if ((bnep_remote_uuid == 0) || (sdp_bnep_remote_uuid == BLUETOOTH_SERVICE_CLASS_NAP && bnep_remote_uuid == BLUETOOTH_SERVICE_CLASS_PANU)) { 132 145 bnep_l2cap_psm = sdp_bnep_l2cap_psm; 133 146 bnep_remote_uuid = sdp_bnep_remote_uuid; … … 146 159 147 160 switch (event->type) { 148 case SDP_ QUERY_ATTRIBUTE_VALUE:161 case SDP_EVENT_QUERY_ATTRIBUTE_VALUE: 149 162 value_event = (sdp_query_attribute_value_event_t*)event; 150 163 … … 165 178 166 179 switch (value_event->attribute_id) { 167 case SDP_ServiceClassIDList:180 case BLUETOOTH_ATTRIBUTE_SERVICE_CLASS_ID_LIST: 168 181 if (de_get_element_type(attribute_value) != DE_DES) break; 169 182 for (des_iterator_init(&des_list_it, attribute_value); des_iterator_has_more(&des_list_it); des_iterator_next(&des_list_it)) { … … 172 185 uint32_t uuid = de_get_uuid32(element); 173 186 switch (uuid) { 174 case B NEP_UUID_PANU:175 case B NEP_UUID_NAP:176 case B NEP_UUID_GN:187 case BLUETOOTH_SERVICE_CLASS_PANU: 188 case BLUETOOTH_SERVICE_CLASS_NAP: 189 case BLUETOOTH_SERVICE_CLASS_GN: 177 190 log_info("SDP Attribute 0x%04x: BNEP PAN protocol UUID: %04x", value_event->attribute_id, uuid); 178 191 sdp_bnep_remote_uuid = uuid; … … 192 205 free(str); 193 206 break; 194 case SDP_ProtocolDescriptorList: {207 case BLUETOOTH_ATTRIBUTE_PROTOCOL_DESCRIPTOR_LIST: { 195 208 log_info("SDP Attribute: 0x%04x", value_event->attribute_id); 196 209 … … 210 223 uuid = de_get_uuid32(element); 211 224 switch (uuid) { 212 case SDP_L2CAPProtocol:225 case BLUETOOTH_PROTOCOL_L2CAP: 213 226 if (!des_iterator_has_more(&prot_it)) continue; 214 227 des_iterator_next(&prot_it); 215 228 de_element_get_uint16(des_iterator_get_element(&prot_it), &sdp_bnep_l2cap_psm); 216 229 break; 217 case SDP_BNEPProtocol:230 case BLUETOOTH_PROTOCOL_BNEP: 218 231 if (!des_iterator_has_more(&prot_it)) continue; 219 232 des_iterator_next(&prot_it); … … 238 251 break; 239 252 240 case SDP_ QUERY_COMPLETE:253 case SDP_EVENT_QUERY_COMPLETE: 241 254 handle_sdp_client_record_complete(); 242 255 complete_event = (sdp_query_complete_event_t*)event; … … 246 259 } 247 260 else { 261 bnep_do_connect = false; 248 262 log_error("No BNEP service found"); 263 } 264 if (!bnep_do_connect) { 265 // 20秒後 BNEP Query 開始 266 bt_state = BT_STATE_BNEP_QUERY_WAIT; 267 bt_timer = 20 * 1000; 249 268 } 250 269 break; … … 269 288 if (packet[2] == HCI_STATE_WORKING) { 270 289 hci_send_cmd(&hci_write_local_name, bt_localname); 271 /* Send a general query for BNEP Protocol ID */ 272 log_info("Start SDP BNEP query."); 273 sdp_general_query_for_uuid(remote_addr, SDP_BNEPProtocol); 290 if (bt_bnep_mode == 0) { 291 // 即時 BNEP Query 開始 292 bt_state = BT_STATE_BNEP_QUERY_WAIT; 293 bt_timer = 0; 294 } 295 else { 296 bt_state = BT_STATE_BNEP_WAIT; 297 bt_timer = -1; 298 } 274 299 } 275 300 break; … … 284 309 285 310 case HCI_EVENT_COMMAND_COMPLETE: 286 if ( COMMAND_COMPLETE_EVENT(packet, hci_read_bd_addr)) {287 bt_flip_addr(event_addr, &packet[6]);311 if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_bd_addr)) { 312 reverse_bd_addr(&packet[6], event_addr); 288 313 log_info("BD-ADDR: %s", bd_addr_to_str(event_addr)); 289 314 … … 292 317 break; 293 318 } 294 if ( COMMAND_COMPLETE_EVENT(packet, hci_write_local_name)) {295 hci_discoverable_control(1);319 if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_write_local_name)) { 320 gap_discoverable_control(1); 296 321 break; 297 322 } … … 301 326 // deny link key request 302 327 log_info("Link key request"); 303 bt_flip_addr(event_addr, &packet[2]);328 reverse_bd_addr(&packet[2], event_addr); 304 329 hci_send_cmd(&hci_link_key_request_negative_reply, &event_addr); 305 330 break; … … 308 333 // inform about pin code request 309 334 log_info("Pin code request - using '0000'"); 310 bt_flip_addr(event_addr, &packet[2]);335 reverse_bd_addr(&packet[2], event_addr); 311 336 hci_send_cmd(&hci_pin_code_request_reply, &event_addr, 4, "0000"); 312 337 break; … … 314 339 case HCI_EVENT_USER_CONFIRMATION_REQUEST: 315 340 // inform about user confirmation request 316 log_info("HCI User Confirmation Request with numeric value '%06u'", READ_BT_32(packet, 8));341 log_info("HCI User Confirmation Request with numeric value '%06u'", little_endian_read_32(packet, 8)); 317 342 log_info("HCI User Confirmation Auto accept"); 318 343 break; … … 320 345 case RFCOMM_EVENT_INCOMING_CONNECTION: 321 346 // data: event (8), len(8), address(48), channel (8), rfcomm_cid (16) 322 bt_flip_addr(event_addr, &packet[2]);347 reverse_bd_addr(&packet[2], event_addr); 323 348 rfcomm_channel_nr = packet[8]; 324 rfcomm_channel_id = READ_BT_16(packet, 9);349 rfcomm_channel_id = little_endian_read_16(packet, 9); 325 350 log_info("RFCOMM channel %u requested for %s", rfcomm_channel_nr, bd_addr_to_str(event_addr)); 326 351 rfcomm_accept_connection_internal(rfcomm_channel_id); … … 333 358 } 334 359 else { 335 rfcomm_channel_id = READ_BT_16(packet, 12);336 mtu = READ_BT_16(packet, 14);360 rfcomm_channel_id = little_endian_read_16(packet, 12); 361 mtu = little_endian_read_16(packet, 14); 337 362 log_info("RFCOMM channel open succeeded. New RFCOMM Channel ID %u, max frame size %u", rfcomm_channel_id, mtu); 338 363 } … … 347 372 if (packet[2]) { 348 373 log_info("BNEP channel open failed, status %02x", packet[2]); 374 375 // 30秒後 BNEP Query 開始 376 bt_state = BT_STATE_BNEP_QUERY_WAIT; 377 bt_timer = 30 * 1000; 349 378 } 350 379 else { 351 380 // data: event(8), len(8), status (8), bnep source uuid (16), bnep destination uuid (16), remote_address (48) 352 bnep_cid = READ_BT_16(packet, 3);353 uuid_source = READ_BT_16(packet, 5);354 uuid_dest = READ_BT_16(packet, 7);355 mtu = READ_BT_16(packet, 9);356 // bt_flip_addr(remote_addr, &packet[11]);381 bnep_cid = little_endian_read_16(packet, 3); 382 uuid_source = little_endian_read_16(packet, 5); 383 uuid_dest = little_endian_read_16(packet, 7); 384 mtu = little_endian_read_16(packet, 9); 385 //reverse_bd_addr(&packet[11], remote_addr); 357 386 memcpy(&remote_addr, &packet[11], sizeof(bd_addr_t)); 358 387 log_info("BNEP connection open succeeded to %s source UUID 0x%04x dest UUID: 0x%04x, max frame size %u", bd_addr_to_str(event_addr), uuid_source, uuid_dest, mtu); … … 360 389 btstack_network_up(bnep_cid, (uint8_t *)hci_local_bd_addr(), (uint8_t *)remote_addr); 361 390 log_info("Network Interface %s activated", btstack_network_get_name(bnep_cid)); 391 392 bt_state = BT_STATE_CONNECTED; 393 bt_timer = -1; 362 394 } 363 395 break; … … 368 400 369 401 case BNEP_EVENT_CHANNEL_CLOSED: 370 bnep_cid = READ_BT_16(packet, 2);402 bnep_cid = little_endian_read_16(packet, 2); 371 403 bt_channel_closed(bnep_cid); 404 405 // 30秒後 BNEP Query 開始 406 bt_state = BT_STATE_BNEP_QUERY_WAIT; 407 bt_timer = 30 * 1000; 372 408 break; 373 409 374 410 case BNEP_EVENT_READY_TO_SEND: 375 bnep_cid = READ_BT_16(packet, 2);411 bnep_cid = little_endian_read_16(packet, 2); 376 412 bt_send_packet(bnep_cid); 377 413 break; … … 428 464 } 429 465 430 void panu_init(void)466 void bt_init(void) 431 467 { 432 468 const hci_transport_t *transport; … … 437 473 service_record_item_t *bnep_service_record_item; 438 474 475 btstack_network_init(&network_send_packet_callback); 476 439 477 //hci_dump_open("", HCI_DUMP_PACKETLOGGER); 440 441 log_info("bt初期化...");442 478 443 479 // start with BTstack init - especially configure HCI Transport … … 446 482 447 483 /* Initialize HCI */ 448 log_info("HCI初期化...");449 484 transport = hci_transport_usb_instance(); 450 485 control = NULL; … … 455 490 456 491 /* Initialize L2CAP */ 457 log_info("L2CAP初期化...");458 492 l2cap_init(); 459 493 l2cap_register_packet_handler(packet_handler); 460 494 461 495 /* Initialise SDP, create record for SPP and register with SDP */ 462 log_info("SDP初期化...");463 496 sdp_init(); 464 497 465 498 /* Initialize RFCOMM */ 466 log_info("RFCOMM初期化...");467 499 rfcomm_init(); 468 500 rfcomm_register_packet_handler(packet_handler); … … 470 502 471 503 /* Initialise BNEP */ 472 log_info("BNEP初期化...");473 504 bnep_init(); 474 505 bnep_register_packet_handler(packet_handler); 475 bnep_register_service(NULL, BNEP_UUID_PANU, BNEP_MTU_MIN); /* Minimum L2CAP MTU for bnep is 1691 bytes */ 506 if (bt_bnep_mode == 0) { 507 bnep_register_service(NULL, BLUETOOTH_SERVICE_CLASS_PANU, BNEP_MTU_MIN); /* Minimum L2CAP MTU for bnep is 1691 bytes */ 508 } 509 else { 510 bnep_register_service(NULL, BLUETOOTH_SERVICE_CLASS_NAP, BNEP_MTU_MIN); /* Minimum L2CAP MTU for bnep is 1691 bytes */ 511 } 476 512 477 513 memset(spp_service_buffer, 0, sizeof(spp_service_buffer)); … … 482 518 bnep_service_record_item = (service_record_item_t *)bnep_service_buffer; 483 519 484 log_info("SPPサービス登録...");485 520 sdp_create_spp_service((uint8_t*)&spp_service_record_item->service_record, 1, "RX SPP"); 486 521 de_dump_data_element((uint8_t*)spp_service_record_item->service_record); … … 488 523 sdp_register_service_internal(NULL, spp_service_record_item); 489 524 490 log_info("BNEPサービス登録..."); 491 pan_create_panu_service((uint8_t*)&bnep_service_record_item->service_record, "RX PANU", "RX PANU", BNEP_SECURITY_NONE); 492 de_dump_data_element((uint8_t*)bnep_service_record_item->service_record); 493 log_info("PANU SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record))); 525 if (bt_bnep_mode == 0) { 526 pan_create_panu_service((uint8_t*)&bnep_service_record_item->service_record, "RX PANU", "RX PANU", BNEP_SECURITY_NONE); 527 de_dump_data_element((uint8_t*)bnep_service_record_item->service_record); 528 log_info("PANU SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record))); 529 } 530 else { 531 pan_create_nap_service((uint8_t*)&bnep_service_record_item->service_record, "RX NAP", "RX NAP", BNEP_SECURITY_NONE, 532 PAN_NET_ACCESS_TYPE_100MB_ETHERNET, 0x0001312D0/*10Mb/sec*/, NULL, NULL); 533 de_dump_data_element((uint8_t*)bnep_service_record_item->service_record); 534 log_info("NAP SDP service buffer size: %u", (uint16_t)(sizeof(service_record_item_t) + de_get_len((uint8_t*)bnep_service_record_item->service_record))); 535 } 494 536 sdp_register_service_internal(NULL, bnep_service_record_item); 495 537 … … 500 542 501 543 /* Turn on the device */ 502 log_info("HCI電源ON...");503 544 hci_power_control(HCI_POWER_ON); 504 545 … … 506 547 sdp_parser_init(); 507 548 sdp_parser_register_callback(handle_sdp_client_query_result); 508 } 509 510 void nap_init(void); 511 512 void bt_init(void) 513 { 514 btstack_network_init(&network_send_packet_callback); 515 516 if (bt_bnep_mode == 0) { 517 panu_init(); 518 } 519 else { 520 nap_init(); 521 } 522 523 bt_enabled = true; 524 } 525 526 void bt_task(void) 527 { 528 extern void hal_tick_handler(); 529 530 if (bt_enabled) { 531 hal_tick_handler(); 549 550 bt_state = BT_STATE_POWER_ON; 551 bt_timer = -1; 552 } 553 554 void bt_process(void) 555 { 556 if (bt_state != BT_STATE_DORMANT) { 532 557 run_loop_execute(); 533 558 bt_send_packet(0xffff); 559 } 560 561 if (bt_timer != 0) 562 return; 563 564 switch (bt_state) { 565 case BT_STATE_BNEP_QUERY_WAIT: 566 /* Send a general query for BNEP Protocol ID */ 567 log_info("Start SDP BNEP query."); 568 sdp_general_query_for_uuid(remote_addr, BLUETOOTH_PROTOCOL_BNEP); 569 570 bt_state = BT_STATE_BNEP_QUERY; 571 bt_timer = -1; 572 break; 573 default: 574 bt_timer = -1; 575 break; 534 576 } 535 577 } … … 592 634 hci_close(); 593 635 594 bt_enabled = false; 595 } 636 bt_state = BT_STATE_DORMANT; 637 bt_timer = -1; 638 } 639 640 void bt_task_on_start(struct task_if_t *task, ID tskid) 641 { 642 } 643 644 void bt_task_on_end(struct task_if_t *task) 645 { 646 } 647 648 int bt_task_get_timer(struct task_if_t *task) 649 { 650 return bt_timer; 651 } 652 653 void bt_task_progress(struct task_if_t *task, int elapse) 654 { 655 if (bt_timer == -1) 656 return; 657 658 bt_timer -= elapse; 659 if (bt_timer < 0) 660 bt_timer = 0; 661 } 662 663 void bt_task_process(struct task_if_t *task, enum task_event_t event) 664 { 665 extern void hal_tick_handler(); 666 667 switch (event & ~TASK_EVENT_TICK) { 668 case TASK_EVENT_START: 669 bt_init(); 670 break; 671 case TASK_EVENT_TERMINATE: 672 bt_terminate(); 673 break; 674 case TASK_EVENT_WAKEUP: 675 case TASK_EVENT_TIMEOUT: 676 if (event & TASK_EVENT_TICK) 677 hal_tick_handler(); 678 bt_process(); 679 break; 680 } 681 } 682 683 struct task_if_t bt_task = { 684 bt_task_on_start, 685 bt_task_on_end, 686 bt_task_get_timer, 687 bt_task_progress, 688 bt_task_process, 689 }; -
asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netdev/if_enbt/bt_main.h
r373 r374 1 1 /* 2 * panu_main.h2 * bt_main.h 3 3 * 4 4 */ … … 16 16 17 17 void bt_init(void); 18 void bt_task(void);19 18 int bt_can_send_packet(void); 20 19 void bt_send_packet(uint16_t bnep_cid); -
asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/netdev/if_enbt/if_btusb.c
r352 r374 77 77 #include "kernel/kernel_impl.h" 78 78 #include "btstack/utils.h" 79 #include " panu_main.h"79 #include "bt_main.h" 80 80 #include "usb_hbth.h" 81 81 //#include "hal_cpu.h"
Note:
See TracChangeset
for help on using the changeset viewer.