mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-07-26 02:28:41 +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")
|
||||
ErrProtocolNotSupported = errors.New("Socket protocol/type not supported")
|
||||
ErrStartingDHCPClient = errors.New("Error starting DHPC client")
|
||||
ErrStartingDHCPServer = errors.New("Error starting DHPC server")
|
||||
ErrNoMoreSockets = errors.New("No more sockets")
|
||||
ErrClosingSocket = errors.New("Error closing socket")
|
||||
ErrNotSupported = errors.New("Not supported")
|
||||
|
||||
+66
-7
@@ -32,8 +32,9 @@ var (
|
||||
)
|
||||
|
||||
const (
|
||||
O_NONBLOCK = 1 // note: different value than syscall.O_NONBLOCK (0x800)
|
||||
RTW_MODE_STA = 0x00000001
|
||||
O_NONBLOCK = 1 // note: different value than syscall.O_NONBLOCK (0x800)
|
||||
RTW_MODE_STA = 0x00000001
|
||||
defaultChannel = 6
|
||||
)
|
||||
|
||||
type sock int32
|
||||
@@ -135,6 +136,51 @@ func (r *rtl8720dn) connectToAP() error {
|
||||
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() {
|
||||
if r.driverShown {
|
||||
return
|
||||
@@ -246,14 +292,27 @@ func (r *rtl8720dn) netConnect(reset bool) error {
|
||||
}
|
||||
r.showDevice()
|
||||
|
||||
retry:
|
||||
for i := 0; r.params.Retries == 0 || i < r.params.Retries; i++ {
|
||||
if err := r.connectToAP(); err != nil {
|
||||
if err == netlink.ErrConnectFailed {
|
||||
continue
|
||||
switch r.params.ConnectMode {
|
||||
case netlink.ConnectModeAP:
|
||||
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() {
|
||||
|
||||
Reference in New Issue
Block a user