Skip to content

Commit 7e34671

Browse files
committed
Reconnect after pair works
1 parent 86704a6 commit 7e34671

File tree

5 files changed

+61
-126
lines changed

5 files changed

+61
-126
lines changed

gc/bte/bte.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,6 @@ s32 BTE_ReadStoredLinkKey(struct linkkey_info *keys,u8 max_cnt,btecallback cb);
149149
s32 BTE_ReadBdAddr(struct bd_addr *bdaddr, btecallback cb);
150150
s32 BTE_SetEvtFilter(u8 filter_type,u8 filter_cond_type,u8 *cond, btecallback cb);
151151
s32 BTE_ReadRemoteName(struct bd_addr *bdaddr, btecallback cb);
152-
s32 BTE_ReadClockOffset(struct bd_addr *bdaddr, btecallback cb);
153-
s32 BTE_ReadRemoteVersionInfo(struct bd_addr *bdaddr, btecallback cb);
154-
s32 BTE_ReadRemoteFeatures(struct bd_addr *bdaddr, btecallback cb);
155152
s32 BTE_Inquiry(u8 max_cnt,u8 flush, btecallback cb);
156153
s32 BTE_PeriodicInquiry(u8 max_cnt,u8 flush,btecallback cb);
157154
s32 BTE_ExitPeriodicInquiry(void);
@@ -173,6 +170,7 @@ void bte_received(struct bte_pcb *pcb, s32 (*recv)(void *arg,void *buffer,u16 le
173170
void bte_disconnected(struct bte_pcb *pcb,s32 (disconn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
174171

175172
s32 bte_registerdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
173+
s32 bte_registerdeviceasync2(struct bte_pcb *pcb,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
176174
s32 bte_connectdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
177175
s32 bte_connectdeviceasync2(struct bte_pcb *pcb,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
178176

lwbt/bte.c

Lines changed: 39 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -547,54 +547,6 @@ s32 BTE_ReadRemoteName(struct bd_addr *bdaddr, btecallback cb)
547547
return last_err;
548548
}
549549

550-
s32 BTE_ReadClockOffset(struct bd_addr *bdaddr, btecallback cb)
551-
{
552-
u32 level;
553-
err_t last_err = ERR_OK;
554-
555-
_CPU_ISR_Disable(level);
556-
btstate.cb = cb;
557-
btstate.usrdata = NULL;
558-
btstate.hci_cmddone = 0;
559-
hci_arg(&btstate);
560-
hci_read_clock_offset(bdaddr);
561-
_CPU_ISR_Restore(level);
562-
563-
return last_err;
564-
}
565-
566-
/*s32 BTE_ReadRemoteVersionInfo(struct bd_addr *bdaddr, btecallback cb)
567-
{
568-
u32 level;
569-
err_t last_err = ERR_OK;
570-
571-
_CPU_ISR_Disable(level);
572-
btstate.cb = cb;
573-
btstate.usrdata = NULL;
574-
btstate.hci_cmddone = 0;
575-
hci_arg(&btstate);
576-
hci_read_remote_version_info(bdaddr);
577-
_CPU_ISR_Restore(level);
578-
579-
return last_err;
580-
}
581-
582-
s32 BTE_ReadRemoteFeatures(struct bd_addr *bdaddr, btecallback cb)
583-
{
584-
u32 level;
585-
err_t last_err = ERR_OK;
586-
587-
_CPU_ISR_Disable(level);
588-
btstate.cb = cb;
589-
btstate.usrdata = NULL;
590-
btstate.hci_cmddone = 0;
591-
hci_arg(&btstate);
592-
hci_read_remote_features(bdaddr);
593-
_CPU_ISR_Restore(level);
594-
595-
return last_err;
596-
}*/
597-
598550
s32 BTE_LinkKeyRequestReply(struct bd_addr *bdaddr,u8 *key)
599551
{
600552
u32 level;
@@ -752,7 +704,41 @@ s32 bte_registerdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*con
752704

753705
error:
754706
_CPU_ISR_Restore(level);
755-
//printf("bte_registerdeviceasync(%02x)\n",err);
707+
printf("bte_registerdeviceasync(%02x)\n",err);
708+
return err;
709+
}
710+
711+
s32 bte_registerdeviceasync2(struct bte_pcb *pcb,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err))
712+
{
713+
u32 level;
714+
s32 err = ERR_OK;
715+
struct l2cap_pcb *l2capcb = NULL;
716+
717+
//printf("bte_registerdeviceasync2()\n");
718+
_CPU_ISR_Disable(level);
719+
if(!lp_is_connected(&(pcb->bdaddr))) {
720+
printf("bdaddr not connected: %02x:%02x:%02x:%02x:%02x:%02x\n",pcb->bdaddr.addr[5],pcb->bdaddr.addr[4],pcb->bdaddr.addr[3],pcb->bdaddr.addr[2],pcb->bdaddr.addr[1],pcb->bdaddr.addr[0]);
721+
err = ERR_CONN;
722+
goto error;
723+
}
724+
725+
pcb->conn_cfm = conn_cfm;
726+
727+
if((l2capcb=l2cap_new())==NULL) {
728+
err = ERR_MEM;
729+
goto error;
730+
}
731+
l2cap_arg(l2capcb,pcb);
732+
733+
err = l2cap_connect_ind(l2capcb,&(pcb->bdaddr),HIDP_DATA_CHANNEL,l2cap_accepted);
734+
if(err!=ERR_OK) {
735+
l2cap_close(l2capcb);
736+
err = ERR_CONN;
737+
}
738+
739+
error:
740+
_CPU_ISR_Restore(level);
741+
printf("bte_registerdeviceasync2(%02x)\n",err);
756742
return err;
757743
}
758744

@@ -1247,17 +1233,14 @@ err_t l2cap_accepted(void *arg,struct l2cap_pcb *l2cappcb,err_t err)
12471233
btepcb->data_pcb = l2cappcb;
12481234
break;
12491235
}
1250-
if(btepcb->data_pcb && btepcb->ctl_pcb) {
1251-
btepcb->err = ERR_OK;
1252-
btepcb->state = (u32)STATE_CONNECTED;
1253-
if(btepcb->conn_cfm) btepcb->conn_cfm(btepcb->cbarg,btepcb,ERR_OK);
1254-
}
1236+
btepcb->err = ERR_OK;
1237+
btepcb->state = (u32)STATE_CONNECTED;
12551238
} else {
12561239
l2cap_close(l2cappcb);
12571240
btepcb->err = ERR_CONN;
1258-
if(btepcb->conn_cfm) btepcb->conn_cfm(btepcb->cbarg,btepcb,ERR_CONN);
12591241
}
1260-
1242+
1243+
if(btepcb->conn_cfm) btepcb->conn_cfm(btepcb->cbarg,btepcb,btepcb->err);
12611244
return ERR_OK;
12621245
}
12631246

lwbt/hci.c

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1830,56 +1830,6 @@ static void hci_inquiry_result_with_rssi_evt(struct pbuf *p)
18301830

18311831
}
18321832

1833-
static void hci_read_remote_features_complete_evt(struct pbuf *p)
1834-
{
1835-
u16_t conn_handle;
1836-
1837-
switch(((u8_t*)p->payload)[0]) {
1838-
case HCI_SUCCESS:
1839-
conn_handle = le16toh(*((u16_t*)(((u8_t*)p->payload)+1)));
1840-
//hci_read_remote_features(conn_handle);
1841-
break;
1842-
default:
1843-
break;
1844-
}
1845-
}
1846-
1847-
static void hci_read_remote_version_info_complete_evt(struct pbuf *p)
1848-
{
1849-
u16_t conn_handle;
1850-
u8_t version;
1851-
u16_t manufacturer_name;
1852-
u16_t subversion;
1853-
1854-
switch(((u8_t*)p->payload)[0]) {
1855-
case HCI_SUCCESS:
1856-
conn_handle = le16toh(*((u16_t*)(((u8_t*)p->payload)+1)));
1857-
version = ((u8_t*)p->payload)[3];
1858-
manufacturer_name = le16toh(*((u16_t*)(((u8_t*)p->payload)+4)));
1859-
subversion = le16toh(*((u16_t*)(((u8_t*)p->payload)+5)));
1860-
hci_read_remote_features(conn_handle);
1861-
break;
1862-
default:
1863-
break;
1864-
}
1865-
}
1866-
1867-
static void hci_read_clock_offset_complete_evt(struct pbuf *p)
1868-
{
1869-
u16_t conn_handle;
1870-
u16_t clock_offset;
1871-
1872-
switch(((u8_t*)p->payload)[0]) {
1873-
case HCI_SUCCESS:
1874-
conn_handle = le16toh(*((u16_t*)(((u8_t*)p->payload)+1)));
1875-
clock_offset = le16toh(*((u16_t*)(((u8_t*)p->payload)+3)));
1876-
hci_read_remote_version_info(conn_handle);
1877-
break;
1878-
default:
1879-
break;
1880-
}
1881-
}
1882-
18831833
static void hci_return_link_key_evt(struct pbuf *p)
18841834
{
18851835
u8_t num_keys;
@@ -1993,10 +1943,8 @@ void hci_event_handler(struct pbuf *p)
19931943
case HCI_ENCRYPTION_CHANGE:
19941944
break;
19951945
case HCI_READ_REMOTE_FEATURES_COMPLETE:
1996-
hci_read_remote_features_complete_evt(p);
19971946
break;
19981947
case HCI_READ_REMOTE_VERSION_COMPLETE:
1999-
hci_read_remote_version_info_complete_evt(p);
20001948
break;
20011949
case HCI_QOS_SETUP_COMPLETE:
20021950
break;
@@ -2072,7 +2020,6 @@ void hci_event_handler(struct pbuf *p)
20722020
case HCI_MAX_SLOTS_CHANGE:
20732021
break;
20742022
case HCI_READ_CLOCK_OFFSET_COMPLETE:
2075-
hci_read_clock_offset_complete_evt(p);
20762023
break;
20772024
case HCI_RETURN_LINK_KEYS:
20782025
hci_return_link_key_evt(p);

wiiuse/io_wii.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ static s32 __wiiuse_connected2(void *arg,struct bte_pcb *pcb,u8 err)
8383
struct wiimote_listen_t *wml = (struct wiimote_listen_t*)arg;
8484
struct wiimote_t *wm;
8585

86+
printf("__wiiuse_connected2(%d)\n", err);
8687
wm = wml->assign_cb(wml, err);
8788

8889
if(!wm) {
@@ -95,7 +96,7 @@ static s32 __wiiuse_connected2(void *arg,struct bte_pcb *pcb,u8 err)
9596
wm->sock = wml->sock;
9697
wm->bdaddr = wml->bdaddr;
9798

98-
//printf("__wiiuse_connected()\n");
99+
//printf("__wiiuse_connected2()\n");
99100
WIIMOTE_ENABLE_STATE(wm,(WIIMOTE_STATE_CONNECTED|WIIMOTE_STATE_HANDSHAKE));
100101

101102
wm->handshake_state = 0;
@@ -106,6 +107,7 @@ static s32 __wiiuse_connected2(void *arg,struct bte_pcb *pcb,u8 err)
106107

107108
static s32 __wiiuse_connected(void *arg,struct bte_pcb *pcb,u8 err)
108109
{
110+
printf("__wiiuse_connected(%d)\n", err);
109111
if (err!=ERR_OK) {
110112
bte_disconnect(pcb);
111113
return ERR_OK;
@@ -115,7 +117,23 @@ static s32 __wiiuse_connected(void *arg,struct bte_pcb *pcb,u8 err)
115117

116118
if(err==ERR_OK) return ERR_OK;
117119

118-
printf("wiiuse_connect: bte_registerdeviceasync failed(%d)\n", err);
120+
printf("__wiiuse_connected: bte_connectdeviceasync2 failed(%d)\n", err);
121+
return err;
122+
}
123+
124+
static s32 __wiiuse_registered(void *arg,struct bte_pcb *pcb,u8 err)
125+
{
126+
printf("__wiiuse_registered(%d)\n", err);
127+
if (err!=ERR_OK) {
128+
bte_disconnect(pcb);
129+
return ERR_OK;
130+
}
131+
132+
err = bte_registerdeviceasync2(pcb,__wiiuse_connected2);
133+
134+
if(err==ERR_OK) return ERR_OK;
135+
136+
printf("__wiiuse_registered: bte_registerdeviceasync2 failed(%d)\n", err);
119137
return err;
120138
}
121139

@@ -161,7 +179,7 @@ int wiiuse_register(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, struct
161179
bte_received(wml->sock,__wiiuse_receive);
162180
bte_disconnected(wml->sock,__wiiuse_disconnected);
163181

164-
err = bte_registerdeviceasync(wml->sock,bdaddr,__wiiuse_connected);
182+
err = bte_registerdeviceasync(wml->sock,bdaddr,__wiiuse_registered);
165183
if(err==ERR_OK) return 1;
166184

167185
printf("wiiuse_register: bte_registerdeviceasync failed(%d)\n", err);

wiiuse/wpad.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -830,17 +830,6 @@ static void __wpad_syncbuttonCB(u32 held)
830830
_CPU_ISR_Restore(level);
831831
}
832832

833-
s32 __wpad_read_remote_features_finished(s32 result,void *userdata)
834-
{
835-
836-
}
837-
838-
s32 __wpad_read_clock_offset_finished(s32 result,void *userdata)
839-
{
840-
//BTE_ReadClockOffset(&info->bdaddr, __wpad_read_clock_offset_finished);
841-
return result;
842-
}
843-
844833
s32 __wpad_read_remote_name_finished(s32 result,void *userdata)
845834
{
846835
int i;

0 commit comments

Comments
 (0)