diff --git a/examples/rtl8720dn/wioterminal.go b/examples/rtl8720dn/wioterminal.go index ad56b8770..0695f2f9b 100644 --- a/examples/rtl8720dn/wioterminal.go +++ b/examples/rtl8720dn/wioterminal.go @@ -47,7 +47,7 @@ func Setup() (*rtl8720dn.RTL8720DN, error) { rtl := rtl8720dn.New(uart) rtl.Debug(debug) - _, err := rtl.Rpc_tcpip_adapter_init() + _, err := rtl.Rpc_tcpip_adapter_init_with_timeout(10 * time.Second) if err != nil { return nil, err } diff --git a/rtl8720dn/rtl8720dn.go b/rtl8720dn/rtl8720dn.go index e24e84189..53a411fee 100644 --- a/rtl8720dn/rtl8720dn.go +++ b/rtl8720dn/rtl8720dn.go @@ -1,6 +1,10 @@ package rtl8720dn -import "io" +import ( + "fmt" + "io" + "time" +) const maxUartRecvSize = 128 @@ -38,6 +42,33 @@ func New(r io.ReadWriter) *RTL8720DN { return ret } +func (r *RTL8720DN) Rpc_tcpip_adapter_init_with_timeout(d time.Duration) (int32, error) { + timeout := make(chan bool) + go func() { + time.Sleep(d) + timeout <- true + }() + + var ret int32 + var err error + done := make(chan bool) + go func() { + ret, err = r.Rpc_tcpip_adapter_init() + done <- true + }() + + select { + case <-timeout: + return ret, fmt.Errorf("Rpc_tcpip_adapter_init: timeout") + case <-done: + if err != nil { + return ret, err + } + } + + return ret, nil +} + func (r *RTL8720DN) SetSeq(s uint64) { r.seq = s }