mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-18 21:53:56 +00:00
rtl8720dn: implement ConnectModeAP
Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
@@ -36,6 +36,7 @@ var (
|
|||||||
ErrFamilyNotSupported = errors.New("Address family not supported")
|
ErrFamilyNotSupported = errors.New("Address family not supported")
|
||||||
ErrProtocolNotSupported = errors.New("Socket protocol/type not supported")
|
ErrProtocolNotSupported = errors.New("Socket protocol/type not supported")
|
||||||
ErrStartingDHCPClient = errors.New("Error starting DHPC client")
|
ErrStartingDHCPClient = errors.New("Error starting DHPC client")
|
||||||
|
ErrStartingDHCPServer = errors.New("Error starting DHPC server")
|
||||||
ErrNoMoreSockets = errors.New("No more sockets")
|
ErrNoMoreSockets = errors.New("No more sockets")
|
||||||
ErrClosingSocket = errors.New("Error closing socket")
|
ErrClosingSocket = errors.New("Error closing socket")
|
||||||
ErrNotSupported = errors.New("Not supported")
|
ErrNotSupported = errors.New("Not supported")
|
||||||
|
|||||||
+66
-7
@@ -32,8 +32,9 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
O_NONBLOCK = 1 // note: different value than syscall.O_NONBLOCK (0x800)
|
O_NONBLOCK = 1 // note: different value than syscall.O_NONBLOCK (0x800)
|
||||||
RTW_MODE_STA = 0x00000001
|
RTW_MODE_STA = 0x00000001
|
||||||
|
defaultChannel = 6
|
||||||
)
|
)
|
||||||
|
|
||||||
type sock int32
|
type sock int32
|
||||||
@@ -135,6 +136,51 @@ func (r *rtl8720dn) connectToAP() error {
|
|||||||
return r.startDhcpc()
|
return r.startDhcpc()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *rtl8720dn) startDhcps() error {
|
||||||
|
if result := r.rpc_tcpip_adapter_dhcps_start(0); result == -1 {
|
||||||
|
return netdev.ErrStartingDHCPServer
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *rtl8720dn) startAP() error {
|
||||||
|
if len(r.params.Ssid) == 0 {
|
||||||
|
return netlink.ErrMissingSSID
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(r.params.Passphrase) != 0 && len(r.params.Passphrase) < 8 {
|
||||||
|
return netlink.ErrShortPassphrase
|
||||||
|
}
|
||||||
|
|
||||||
|
if debugging(debugBasic) {
|
||||||
|
fmt.Printf("Starting Wifi AP as SSID '%s'...", r.params.Ssid)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start the connection process
|
||||||
|
securityType := uint32(0) // RTW_SECURITY_OPEN
|
||||||
|
if len(r.params.Passphrase) != 0 {
|
||||||
|
securityType = 0x00400004 // RTW_SECURITY_WPA2_AES_PSK
|
||||||
|
}
|
||||||
|
|
||||||
|
result := r.rpc_wifi_start_ap(r.params.Ssid, r.params.Passphrase, securityType, defaultChannel)
|
||||||
|
if result != 0 {
|
||||||
|
if debugging(debugBasic) {
|
||||||
|
fmt.Printf("FAILED\r\n")
|
||||||
|
}
|
||||||
|
return netlink.ErrConnectFailed
|
||||||
|
}
|
||||||
|
|
||||||
|
if debugging(debugBasic) {
|
||||||
|
fmt.Printf("LISTENING\r\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.notifyCb != nil {
|
||||||
|
r.notifyCb(netlink.EventNetUp)
|
||||||
|
}
|
||||||
|
|
||||||
|
return r.startDhcps()
|
||||||
|
}
|
||||||
|
|
||||||
func (r *rtl8720dn) showDriver() {
|
func (r *rtl8720dn) showDriver() {
|
||||||
if r.driverShown {
|
if r.driverShown {
|
||||||
return
|
return
|
||||||
@@ -246,14 +292,27 @@ func (r *rtl8720dn) netConnect(reset bool) error {
|
|||||||
}
|
}
|
||||||
r.showDevice()
|
r.showDevice()
|
||||||
|
|
||||||
|
retry:
|
||||||
for i := 0; r.params.Retries == 0 || i < r.params.Retries; i++ {
|
for i := 0; r.params.Retries == 0 || i < r.params.Retries; i++ {
|
||||||
if err := r.connectToAP(); err != nil {
|
switch r.params.ConnectMode {
|
||||||
if err == netlink.ErrConnectFailed {
|
case netlink.ConnectModeAP:
|
||||||
continue
|
if err := r.startAP(); err != nil {
|
||||||
|
if err == netlink.ErrConnectFailed {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
return err
|
break retry
|
||||||
|
|
||||||
|
default:
|
||||||
|
if err := r.connectToAP(); err != nil {
|
||||||
|
if err == netlink.ErrConnectFailed {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
break retry
|
||||||
}
|
}
|
||||||
break
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if r.networkDown() {
|
if r.networkDown() {
|
||||||
|
|||||||
Reference in New Issue
Block a user