@@ -42,8 +42,6 @@ struct bt_state
4242
4343 u8_t num_maxdevs ;
4444
45- u8_t pair_mode ;
46-
4745 struct bte_inquiry_res inq_res ;
4846
4947 btecallback cb ;
@@ -89,7 +87,6 @@ static u8_t bte_patch1[92] = {
8987static u8 ppc_stack [STACKSIZE ] ATTRIBUTE_ALIGN (8 );
9088
9189err_t acl_wlp_completed (void * arg ,struct bd_addr * bdaddr );
92- err_t pin_req (void * arg ,struct bd_addr * bdaddr );
9390err_t l2cap_connected (void * arg ,struct l2cap_pcb * l2cappcb ,u16_t result ,u16_t status );
9491err_t l2cap_accepted (void * arg ,struct l2cap_pcb * l2cappcb ,err_t err );
9592err_t acl_conn_complete (void * arg ,struct bd_addr * bdaddr );
@@ -392,7 +389,6 @@ void BTE_Init(void)
392389 hci_connection_complete (acl_conn_complete );
393390 hci_auth_complete (acl_auth_complete );
394391 hci_remote_name_req_complete (bte_read_remote_name_complete );
395- hci_pin_req (pin_req );
396392 _CPU_ISR_Restore (level );
397393
398394 tb .tv_sec = 1 ;
@@ -584,11 +580,6 @@ s32 BTE_LinkKeyRequestNegativeReply(struct bd_addr *bdaddr)
584580 return last_err ;
585581}
586582
587- u8 BTE_GetPairMode (void )
588- {
589- return btstate .pair_mode ;
590- }
591-
592583void (* BTE_SetDisconnectCallback (void (* callback )(struct bd_addr * bdaddr ,u8 reason )))(struct bd_addr * bdaddr ,u8 reason )
593584{
594585 return l2cap_disconnect_bb (callback );
@@ -684,6 +675,47 @@ s32 BTE_DeleteStoredLinkKey(struct bd_addr *bdaddr)
684675 return last_err ;
685676}
686677
678+ void BTE_SetPinCodeRequestCallback (err_t (* callback )(void * arg ,struct bd_addr * bdaddr ))
679+ {
680+ u32 level ;
681+
682+ _CPU_ISR_Disable (level );
683+ hci_pin_req (callback );
684+ _CPU_ISR_Restore (level );
685+ }
686+
687+ s32 BTE_GetLocalAddress (struct bd_addr * bdaddr )
688+ {
689+ u32 level ;
690+ err_t last_err = ERR_OK ;
691+
692+ LOG ("BTE_GetLocalAddress\n" );
693+
694+ _CPU_ISR_Disable (level );
695+ hci_get_bd_addr (bdaddr );
696+ _CPU_ISR_Restore (level );
697+
698+ return last_err ;
699+ }
700+
701+ s32 BTE_PinCodeRequestReply (struct bd_addr * bdaddr ,u8 pinlen ,u8 * pincode )
702+ {
703+ u32 level ;
704+ err_t last_err = ERR_OK ;
705+
706+ LOG ("BTE_PinCodeRequestReply\n" );
707+
708+ _CPU_ISR_Disable (level );
709+ btstate .cb = NULL ;
710+ btstate .usrdata = NULL ;
711+ btstate .hci_cmddone = 0 ;
712+ hci_arg (& btstate );
713+ hci_pin_code_request_reply (bdaddr , pinlen , pincode );
714+ _CPU_ISR_Restore (level );
715+
716+ return last_err ;
717+ }
718+
687719struct bte_pcb * bte_new (void )
688720{
689721 struct bte_pcb * pcb ;
@@ -713,7 +745,6 @@ s32 BTE_Inquiry(u8 max_cnt,u8 flush,btecallback cb)
713745 _CPU_ISR_Disable (level );
714746 if (btstate .inq_res .count == 0 || flush == 1 ) {
715747 btstate .inq_complete_cb = cb ;
716- btstate .pair_mode = PAIR_MODE_NORMAL ;
717748 btstate .num_maxdevs = max_cnt ;
718749 hci_arg (& btstate );
719750 // Use Limited Dedicated Inquiry Access Code (LIAC) to query, since third-party Wiimotes
@@ -724,14 +755,28 @@ s32 BTE_Inquiry(u8 max_cnt,u8 flush,btecallback cb)
724755 return ERR_OK ;
725756}
726757
758+ s32 BTE_InquiryEx (u8 max_cnt ,u8 flush ,btecallback cb ,u32 lap )
759+ {
760+ u32 level ;
761+
762+ _CPU_ISR_Disable (level );
763+ if (btstate .inq_res .count == 0 || flush == 1 ) {
764+ btstate .inq_complete_cb = cb ;
765+ btstate .num_maxdevs = max_cnt ;
766+ hci_arg (& btstate );
767+ hci_inquiry (lap ,0x03 ,max_cnt ,bte_inquiry_complete );
768+ }
769+ _CPU_ISR_Restore (level );
770+ return ERR_OK ;
771+ }
772+
727773s32 BTE_PeriodicInquiry (u8 max_cnt ,u8 flush ,btecallback cb )
728774{
729775 u32 level ;
730776
731777 _CPU_ISR_Disable (level );
732778 if (btstate .inq_res .count == 0 || flush == 1 ) {
733779 btstate .inq_complete_cb = cb ;
734- btstate .pair_mode = PAIR_MODE_TEMPORARY ;
735780 btstate .num_maxdevs = max_cnt ;
736781 hci_arg (& btstate );
737782 // Use Limited Dedicated Inquiry Access Code (LIAC) to query, since third-party Wiimotes
@@ -742,12 +787,26 @@ s32 BTE_PeriodicInquiry(u8 max_cnt,u8 flush,btecallback cb)
742787 return ERR_OK ;
743788}
744789
790+ s32 BTE_PeriodicInquiryEx (u8 max_cnt ,u8 flush ,btecallback cb , u32 lap )
791+ {
792+ u32 level ;
793+
794+ _CPU_ISR_Disable (level );
795+ if (btstate .inq_res .count == 0 || flush == 1 ) {
796+ btstate .inq_complete_cb = cb ;
797+ btstate .num_maxdevs = max_cnt ;
798+ hci_arg (& btstate );
799+ hci_periodic_inquiry (lap ,0x04 ,0x05 ,0x03 ,max_cnt ,bte_inquiry_complete );
800+ }
801+ _CPU_ISR_Restore (level );
802+ return ERR_OK ;
803+ }
804+
745805s32 BTE_ExitPeriodicInquiry (void )
746806{
747807 u32 level ;
748808
749809 _CPU_ISR_Disable (level );
750- btstate .pair_mode = PAIR_MODE_NORMAL ;
751810 hci_exit_periodic_inquiry ();
752811 _CPU_ISR_Restore (level );
753812 return ERR_OK ;
@@ -1046,25 +1105,6 @@ err_t acl_auth_complete(void *arg,struct bd_addr *bdaddr)
10461105 return ERR_OK ;
10471106}
10481107
1049- err_t pin_req (void * arg ,struct bd_addr * bdaddr )
1050- {
1051- struct bd_addr addr ;
1052- LOG ("pin_req\n" );
1053-
1054- if (btstate .pair_mode == PAIR_MODE_NORMAL )
1055- {
1056- // Pairing from sync button (permanent)
1057- hci_get_bd_addr (& addr );
1058- }
1059- else
1060- {
1061- // Pairing from 1+2 (guest/temporary)
1062- bd_addr_set (& addr , bdaddr );
1063- }
1064- hci_pin_code_request_reply (bdaddr , sizeof (addr .addr ), addr .addr );
1065- return ERR_OK ;
1066- }
1067-
10681108err_t l2cap_disconnected_ind (void * arg , struct l2cap_pcb * pcb , err_t err )
10691109{
10701110 struct bte_pcb * bte = (struct bte_pcb * )arg ;
@@ -1220,8 +1260,7 @@ err_t bte_inquiry_complete(void *arg,struct hci_pcb *pcb,struct hci_inq_res *ire
12201260 state -> hci_cmddone = 1 ;
12211261 state -> inq_complete_cb (ERR_OK ,& state -> inq_res );
12221262 _CPU_ISR_Restore (level );
1223- } else if (state -> pair_mode == PAIR_MODE_NORMAL )
1224- hci_inquiry (0x009E8B00 ,0x03 ,btstate .num_maxdevs ,bte_inquiry_complete );
1263+ }
12251264 }
12261265 return ERR_OK ;
12271266}
0 commit comments