Skip to content

Commit 86704a6

Browse files
committed
TRs work
1 parent eea5f61 commit 86704a6

File tree

5 files changed

+73
-14
lines changed

5 files changed

+73
-14
lines changed

gc/bte/bte.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ void bte_disconnected(struct bte_pcb *pcb,s32 (disconn_cfm)(void *arg,struct bte
174174

175175
s32 bte_registerdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
176176
s32 bte_connectdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
177+
s32 bte_connectdeviceasync2(struct bte_pcb *pcb,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err));
177178

178179
s32 bte_disconnect(struct bte_pcb *pcb);
179180

lwbt/bte.c

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ s32 bte_registerdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*con
738738
goto error;
739739
}
740740

741-
if((l2capcb=l2cap_new())==NULL) {
741+
/*if((l2capcb=l2cap_new())==NULL) {
742742
err = ERR_MEM;
743743
goto error;
744744
}
@@ -748,7 +748,7 @@ s32 bte_registerdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*con
748748
if(err!=ERR_OK) {
749749
l2cap_close(l2capcb);
750750
err = ERR_CONN;
751-
}
751+
}*/
752752

753753
error:
754754
_CPU_ISR_Restore(level);
@@ -763,7 +763,7 @@ s32 bte_connectdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn
763763
struct l2cap_pcb *l2capcb = NULL;
764764

765765
_CPU_ISR_Disable(level);
766-
//printf("bte_connectdeviceasync()\n");
766+
printf("bte_connectdeviceasync()\n");
767767
if(lp_is_connected(bdaddr)) {
768768
printf("bdaddr already exists: %02x:%02x:%02x:%02x:%02x:%02x\n",bdaddr->addr[5],bdaddr->addr[4],bdaddr->addr[3],bdaddr->addr[2],bdaddr->addr[1],bdaddr->addr[0]);
769769
err = ERR_CONN;
@@ -789,13 +789,48 @@ s32 bte_connectdeviceasync(struct bte_pcb *pcb,struct bd_addr *bdaddr,s32 (*conn
789789
goto error;
790790
}
791791

792-
if((l2capcb=l2cap_new())==NULL) {
792+
/*if((l2capcb=l2cap_new())==NULL) {
793793
err = ERR_MEM;
794794
goto error;
795795
}
796796
l2cap_arg(l2capcb,pcb);
797797
798798
err = l2ca_connect_req(l2capcb,bdaddr,HIDP_DATA_CHANNEL,HCI_ALLOW_ROLE_SWITCH,l2cap_connected);
799+
if(err!=ERR_OK) {
800+
l2cap_close(l2capcb);
801+
err = ERR_CONN;
802+
}*/
803+
804+
error:
805+
_CPU_ISR_Restore(level);
806+
//printf("bte_connectdeviceasync(%02x)\n",err);
807+
return err;
808+
}
809+
810+
s32 bte_connectdeviceasync2(struct bte_pcb *pcb,s32 (*conn_cfm)(void *arg,struct bte_pcb *pcb,u8 err))
811+
{
812+
u32 level;
813+
s32 err = ERR_OK;
814+
struct l2cap_pcb *l2capcb = NULL;
815+
816+
_CPU_ISR_Disable(level);
817+
printf("bte_connectdeviceasync2()\n");
818+
819+
if(!lp_is_connected(&(pcb->bdaddr))) {
820+
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]);
821+
err = ERR_CONN;
822+
goto error;
823+
}
824+
825+
pcb->conn_cfm = conn_cfm;
826+
827+
if((l2capcb=l2cap_new())==NULL) {
828+
err = ERR_MEM;
829+
goto error;
830+
}
831+
l2cap_arg(l2capcb,pcb);
832+
833+
err = l2ca_connect_req(l2capcb,&(pcb->bdaddr),HIDP_DATA_CHANNEL,HCI_ALLOW_ROLE_SWITCH,l2cap_connected);
799834
if(err!=ERR_OK) {
800835
l2cap_close(l2capcb);
801836
err = ERR_CONN;

lwbt/hci.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ err_t hci_reg_dev_info(struct bd_addr *bdaddr,u8_t *cod,u8_t psrm,u8_t psm,u16_t
299299

300300
static struct pbuf* hci_cmd_ass(struct pbuf *p,u8_t ocf,u8_t ogf,u8_t len)
301301
{
302-
memset(p, 0, len);
302+
memset(p->payload, 0, len);
303303
((u8_t*)p->payload)[0] = HCI_COMMAND_DATA_PACKET; /* cmd packet type */
304304
((u8_t*)p->payload)[1] = (ocf&0xff); /* OCF & OGF */
305305
((u8_t*)p->payload)[2] = ((ocf>>8)|(ogf<<2));

wiiuse/io_wii.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ static s32 __wiiuse_receive(void *arg,void *buffer,u16 len)
7878
return ERR_OK;
7979
}
8080

81-
static s32 __wiiuse_connected(void *arg,struct bte_pcb *pcb,u8 err)
81+
static s32 __wiiuse_connected2(void *arg,struct bte_pcb *pcb,u8 err)
8282
{
8383
struct wiimote_listen_t *wml = (struct wiimote_listen_t*)arg;
8484
struct wiimote_t *wm;
@@ -104,6 +104,21 @@ static s32 __wiiuse_connected(void *arg,struct bte_pcb *pcb,u8 err)
104104
return ERR_OK;
105105
}
106106

107+
static s32 __wiiuse_connected(void *arg,struct bte_pcb *pcb,u8 err)
108+
{
109+
if (err!=ERR_OK) {
110+
bte_disconnect(pcb);
111+
return ERR_OK;
112+
}
113+
114+
err = bte_connectdeviceasync2(pcb,__wiiuse_connected2);
115+
116+
if(err==ERR_OK) return ERR_OK;
117+
118+
printf("wiiuse_connect: bte_registerdeviceasync failed(%d)\n", err);
119+
return err;
120+
}
121+
107122
void __wiiuse_sensorbar_enable(int enable)
108123
{
109124
u32 val;

wiiuse/wpad.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,16 @@ distribution.
5050

5151
#include "lwp_threads.inl"
5252

53-
#define MAX_STREAMDATA_LEN 20
54-
#define EVENTQUEUE_LENGTH 16
53+
#define MAX_STREAMDATA_LEN 20
54+
#define EVENTQUEUE_LENGTH 16
5555

56-
#define DISCONNECT_TIMEOUT 0x08 /* HCI_CONN_TIMEOUT */
57-
#define DISCONNECT_USER_ENDED 0x13 /* HCI_OTHER_END_TERMINATED_CONN_USER_ENDED */
58-
#define DISCONNECT_BATTERY_DIED 0x14 /* HCI_OTHER_END_TERMINATED_CONN_LOW_RESOURCES */
59-
#define DISCONNECT_POWER_OFF 0x15 /* HCI_OTHER_END_TERMINATED_CONN_ABOUT_TO_POWER_OFF */
60-
#define DISCONNECT_IDLE_TIMEOUT 0x16 /* HCI_CONN_TERMINATED_BY_LOCAL_HOST */
56+
#define DISCONNECT_AUTH_FAILURE 0x05 /* HCI_AUTHENTICATION_FAILURE */
57+
#define DISCONNECT_TIMEOUT 0x08 /* HCI_CONN_TIMEOUT */
58+
#define DISCONNECT_USER_ENDED 0x13 /* HCI_OTHER_END_TERMINATED_CONN_USER_ENDED */
59+
#define DISCONNECT_BATTERY_DIED 0x14 /* HCI_OTHER_END_TERMINATED_CONN_LOW_RESOURCES */
60+
#define DISCONNECT_POWER_OFF 0x15 /* HCI_OTHER_END_TERMINATED_CONN_ABOUT_TO_POWER_OFF */
61+
#define DISCONNECT_IDLE_TIMEOUT 0x16 /* HCI_CONN_TERMINATED_BY_LOCAL_HOST */
62+
#define DISCONNECT_REPEATED_ATTEMPTS 0x17 /* HCI_REPEATED_ATTEMPTS */
6163

6264
struct _wpad_thresh{
6365
s32 btns;
@@ -228,7 +230,7 @@ wiimote *__wpad_assign_slot(wiimote_listen *wml, u8 err)
228230
}
229231

230232
if (err) {
231-
printf("WPAD Connection Error %d\n", err);
233+
printf("WPAD Connection Error %d\n", (s8)err);
232234
__wpads_used &= ~(0x01<<i);
233235
_CPU_ISR_Restore(level);
234236
return NULL;
@@ -794,6 +796,12 @@ void __wpad_disconnectCB(struct bd_addr *pad_addr, u8 reason)
794796
case DISCONNECT_TIMEOUT:
795797
// Controller stopped responding for an unknown reason
796798
break;
799+
case DISCONNECT_AUTH_FAILURE:
800+
printf("WPAD Auth Failure\n");
801+
break;
802+
case DISCONNECT_REPEATED_ATTEMPTS:
803+
printf("WPAD Too Many Attempts\n");
804+
break;
797805
case DISCONNECT_USER_ENDED:
798806
printf("WPAD User Disconnect (what?)\n");
799807
break;

0 commit comments

Comments
 (0)