mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-04 15:07:46 +00:00
move netdev and netlink into their own packages and out of drivers
This moves the netdev/netlink namespace out of drivers and into their own packages. Also, defines netdev and netlink as L3/L4 and L2 OSI layers, respectively. Move some L3 functionality from netlink to netdev (GetIPAddr). For netlink, add ConnectParams for NetConnect to pass in L2 connection parameters (ssid, pass, auth_type, etc). Also adds connection mode (STA, AP, etc). For netlink, add SendEth and RecvEthFunc funcs to handle L2 send/recv of Ethernet pkts.
This commit is contained in:
+36
-39
@@ -30,14 +30,11 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers"
|
||||
"tinygo.org/x/drivers/netdev"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
// AP creditials
|
||||
Ssid string
|
||||
Passphrase string
|
||||
|
||||
// UART config
|
||||
Uart *machine.UART
|
||||
Tx machine.Pin
|
||||
@@ -62,25 +59,18 @@ type Device struct {
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func New(cfg *Config) *Device {
|
||||
d := Device{
|
||||
func NewDevice(cfg *Config) *Device {
|
||||
return &Device{
|
||||
cfg: cfg,
|
||||
response: make([]byte, 1500),
|
||||
data: make([]byte, 0, 1500),
|
||||
}
|
||||
|
||||
drivers.UseNetdev(&d)
|
||||
|
||||
// assert that driver implements Netlinker
|
||||
var _ drivers.Netlinker = (*Device)(nil)
|
||||
|
||||
return &d
|
||||
}
|
||||
|
||||
func (d *Device) NetConnect() error {
|
||||
func (d *Device) NetConnect(params *netlink.ConnectParams) error {
|
||||
|
||||
if len(d.cfg.Ssid) == 0 {
|
||||
return drivers.ErrMissingSSID
|
||||
if len(params.Ssid) == 0 {
|
||||
return netlink.ErrMissingSSID
|
||||
}
|
||||
|
||||
d.uart = d.cfg.Uart
|
||||
@@ -98,17 +88,17 @@ func (d *Device) NetConnect() error {
|
||||
|
||||
if !d.Connected() {
|
||||
fmt.Printf("FAILED\r\n")
|
||||
return drivers.ErrConnectFailed
|
||||
return netlink.ErrConnectFailed
|
||||
}
|
||||
|
||||
fmt.Printf("CONNECTED\r\n")
|
||||
|
||||
// Connect to Wifi AP
|
||||
fmt.Printf("Connecting to Wifi SSID '%s'...", d.cfg.Ssid)
|
||||
fmt.Printf("Connecting to Wifi SSID '%s'...", params.Ssid)
|
||||
|
||||
d.SetWifiMode(WifiModeClient)
|
||||
|
||||
err := d.ConnectToAP(d.cfg.Ssid, d.cfg.Passphrase, 10 /* secs */)
|
||||
err := d.ConnectToAP(params.Ssid, params.Passphrase, 10 /* secs */)
|
||||
if err != nil {
|
||||
fmt.Printf("FAILED\r\n")
|
||||
return err
|
||||
@@ -128,20 +118,27 @@ func (d *Device) NetConnect() error {
|
||||
|
||||
func (d *Device) NetDisconnect() {
|
||||
d.DisconnectFromAP()
|
||||
fmt.Printf("\r\nDisconnected from Wifi SSID '%s'\r\n\r\n", d.cfg.Ssid)
|
||||
fmt.Printf("\r\nDisconnected from Wifi\r\n\r\n")
|
||||
}
|
||||
|
||||
func (d *Device) NetNotify(cb func(drivers.NetlinkEvent)) {
|
||||
func (d *Device) NetNotify(cb func(netlink.Event)) {
|
||||
// Not supported
|
||||
}
|
||||
|
||||
func (d *Device) SendEth(pkt []byte) error {
|
||||
return netlink.ErrNotSupported
|
||||
}
|
||||
|
||||
func (d *Device) RecvEthFunc(cb func(pkt []byte) error) {
|
||||
}
|
||||
|
||||
func (d *Device) GetHostByName(name string) (net.IP, error) {
|
||||
ip, err := d.GetDNS(name)
|
||||
return net.ParseIP(ip), err
|
||||
}
|
||||
|
||||
func (d *Device) GetHardwareAddr() (net.HardwareAddr, error) {
|
||||
return net.HardwareAddr{}, drivers.ErrNotSupported
|
||||
return net.HardwareAddr{}, netlink.ErrNotSupported
|
||||
}
|
||||
|
||||
func (d *Device) GetIPAddr() (net.IP, error) {
|
||||
@@ -162,22 +159,22 @@ func (d *Device) GetIPAddr() (net.IP, error) {
|
||||
func (d *Device) Socket(domain int, stype int, protocol int) (int, error) {
|
||||
|
||||
switch domain {
|
||||
case drivers.AF_INET:
|
||||
case netdev.AF_INET:
|
||||
default:
|
||||
return -1, drivers.ErrFamilyNotSupported
|
||||
return -1, netdev.ErrFamilyNotSupported
|
||||
}
|
||||
|
||||
switch {
|
||||
case protocol == drivers.IPPROTO_TCP && stype == drivers.SOCK_STREAM:
|
||||
case protocol == drivers.IPPROTO_TLS && stype == drivers.SOCK_STREAM:
|
||||
case protocol == drivers.IPPROTO_UDP && stype == drivers.SOCK_DGRAM:
|
||||
case protocol == netdev.IPPROTO_TCP && stype == netdev.SOCK_STREAM:
|
||||
case protocol == netdev.IPPROTO_TLS && stype == netdev.SOCK_STREAM:
|
||||
case protocol == netdev.IPPROTO_UDP && stype == netdev.SOCK_DGRAM:
|
||||
default:
|
||||
return -1, drivers.ErrProtocolNotSupported
|
||||
return -1, netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
// Only supporting single connection mode, so only one socket at a time
|
||||
if d.socket.inUse {
|
||||
return -1, drivers.ErrNoMoreSockets
|
||||
return -1, netdev.ErrNoMoreSockets
|
||||
}
|
||||
d.socket.inUse = true
|
||||
d.socket.protocol = protocol
|
||||
@@ -198,11 +195,11 @@ func (d *Device) Connect(sockfd int, host string, ip net.IP, port int) error {
|
||||
var lport = strconv.Itoa(d.socket.lport)
|
||||
|
||||
switch d.socket.protocol {
|
||||
case drivers.IPPROTO_TCP:
|
||||
case netdev.IPPROTO_TCP:
|
||||
err = d.ConnectTCPSocket(addr, rport)
|
||||
case drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_UDP:
|
||||
err = d.ConnectUDPSocket(addr, rport, lport)
|
||||
case drivers.IPPROTO_TLS:
|
||||
case netdev.IPPROTO_TLS:
|
||||
err = d.ConnectSSLSocket(host, rport)
|
||||
}
|
||||
|
||||
@@ -219,22 +216,22 @@ func (d *Device) Connect(sockfd int, host string, ip net.IP, port int) error {
|
||||
|
||||
func (d *Device) Listen(sockfd int, backlog int) error {
|
||||
switch d.socket.protocol {
|
||||
case drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_UDP:
|
||||
default:
|
||||
return drivers.ErrProtocolNotSupported
|
||||
return netdev.ErrProtocolNotSupported
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *Device) Accept(sockfd int, ip net.IP, port int) (int, error) {
|
||||
return -1, drivers.ErrNotSupported
|
||||
return -1, netdev.ErrNotSupported
|
||||
}
|
||||
|
||||
func (d *Device) sendChunk(sockfd int, buf []byte, deadline time.Time) (int, error) {
|
||||
// Check if we've timed out
|
||||
if !deadline.IsZero() {
|
||||
if time.Now().After(deadline) {
|
||||
return -1, drivers.ErrTimeout
|
||||
return -1, netdev.ErrTimeout
|
||||
}
|
||||
}
|
||||
err := d.StartSocketSend(len(buf))
|
||||
@@ -290,7 +287,7 @@ func (d *Device) Recv(sockfd int, buf []byte, flags int, deadline time.Time) (in
|
||||
// Check if we've timed out
|
||||
if !deadline.IsZero() {
|
||||
if time.Now().After(deadline) {
|
||||
return -1, drivers.ErrTimeout
|
||||
return -1, netdev.ErrTimeout
|
||||
}
|
||||
}
|
||||
|
||||
@@ -318,7 +315,7 @@ func (d *Device) Close(sockfd int) error {
|
||||
}
|
||||
|
||||
func (d *Device) SetSockOpt(sockfd int, level int, opt int, value interface{}) error {
|
||||
return drivers.ErrNotSupported
|
||||
return netdev.ErrNotSupported
|
||||
}
|
||||
|
||||
// Connected checks if there is communication with the ESP8266/ESP32.
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
// examples/net/webclient (for HTTP)
|
||||
// examples/net/tlsclient (for HTTPS)
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -20,6 +22,9 @@ import (
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -31,7 +36,13 @@ func main() {
|
||||
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -9,6 +9,8 @@
|
||||
// examples/net/webclient (for HTTP)
|
||||
// examples/net/tlsclient (for HTTPS)
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -18,6 +20,9 @@ import (
|
||||
"machine"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -30,7 +35,13 @@ func main() {
|
||||
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -46,7 +57,7 @@ func main() {
|
||||
}
|
||||
fmt.Println(string(buf.Bytes()))
|
||||
|
||||
netdev.NetDisconnect()
|
||||
link.NetDisconnect()
|
||||
}
|
||||
|
||||
// Wait for user to open serial console
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -9,6 +9,8 @@
|
||||
// examples/net/webclient (for HTTP)
|
||||
// examples/net/tlsclient (for HTTPS)
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -19,6 +21,9 @@ import (
|
||||
"machine"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -30,7 +35,13 @@ func main() {
|
||||
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -50,7 +61,7 @@ func main() {
|
||||
|
||||
fmt.Println(string(body))
|
||||
|
||||
netdev.NetDisconnect()
|
||||
link.NetDisconnect()
|
||||
}
|
||||
|
||||
// Wait for user to open serial console
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -9,6 +9,8 @@
|
||||
// examples/net/webclient (for HTTP)
|
||||
// examples/net/tlsclient (for HTTPS)
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -19,6 +21,9 @@ import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -30,7 +35,13 @@ func main() {
|
||||
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -1,23 +0,0 @@
|
||||
//go:build challenger_rp2040
|
||||
|
||||
// +build: challenger_rp2040
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
|
||||
"tinygo.org/x/drivers/espat"
|
||||
)
|
||||
|
||||
var cfg = espat.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// UART
|
||||
Uart: machine.UART1,
|
||||
Tx: machine.UART1_TX_PIN,
|
||||
Rx: machine.UART1_RX_PIN,
|
||||
}
|
||||
|
||||
var netdev = espat.New(&cfg)
|
||||
@@ -4,6 +4,8 @@
|
||||
// Note: It may be necessary to increase the stack size when using
|
||||
// paho.mqtt.golang. Use the -stack-size=4KB command line option.
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal || challenger_rp2040
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -18,6 +20,8 @@ import (
|
||||
"time"
|
||||
|
||||
mqtt "github.com/soypat/natiu-mqtt"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -30,7 +34,13 @@ var (
|
||||
func main() {
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -99,7 +109,7 @@ func main() {
|
||||
|
||||
time.Sleep(time.Second)
|
||||
|
||||
conn.SetReadDeadline(time.Now().Add(10*time.Second))
|
||||
conn.SetReadDeadline(time.Now().Add(10 * time.Second))
|
||||
err = client.HandleNext()
|
||||
if err != nil {
|
||||
log.Fatal("handle next: ", err)
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -1,23 +0,0 @@
|
||||
//go:build challenger_rp2040
|
||||
|
||||
// +build: challenger_rp2040
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
|
||||
"tinygo.org/x/drivers/espat"
|
||||
)
|
||||
|
||||
var cfg = espat.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// UART
|
||||
Uart: machine.UART1,
|
||||
Tx: machine.UART1_TX_PIN,
|
||||
Rx: machine.UART1_RX_PIN,
|
||||
}
|
||||
|
||||
var netdev = espat.New(&cfg)
|
||||
@@ -4,6 +4,8 @@
|
||||
// Note: It may be necessary to increase the stack size when using
|
||||
// paho.mqtt.golang. Use the -stack-size=4KB command line option.
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal || challenger_rp2040
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -14,6 +16,8 @@ import (
|
||||
"time"
|
||||
|
||||
mqtt "github.com/eclipse/paho.mqtt.golang"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -37,7 +41,13 @@ var connectionLostHandler mqtt.ConnectionLostHandler = func(client mqtt.Client,
|
||||
func main() {
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -1,23 +0,0 @@
|
||||
//go:build challenger_rp2040
|
||||
|
||||
// +build: challenger_rp2040
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
|
||||
"tinygo.org/x/drivers/espat"
|
||||
)
|
||||
|
||||
var cfg = espat.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// UART
|
||||
Uart: machine.UART1,
|
||||
Tx: machine.UART1_TX_PIN,
|
||||
Rx: machine.UART1_RX_PIN,
|
||||
}
|
||||
|
||||
var netdev = espat.New(&cfg)
|
||||
@@ -3,6 +3,8 @@
|
||||
// It creates a UDP connection to request the current time and parse the
|
||||
// response from a NTP server. The system time is set to NTP time.
|
||||
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal || challenger_rp2040
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -13,6 +15,9 @@ import (
|
||||
"net"
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -30,7 +35,13 @@ func main() {
|
||||
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -49,7 +60,7 @@ func main() {
|
||||
}
|
||||
|
||||
conn.Close()
|
||||
netdev.NetDisconnect()
|
||||
link.NetDisconnect()
|
||||
|
||||
runtime.AdjustTimeOffset(-1 * int64(time.Since(t)))
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal arduino_nano33 nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -1,23 +0,0 @@
|
||||
//go:build challenger_rp2040
|
||||
|
||||
// +build: challenger_rp2040
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
|
||||
"tinygo.org/x/drivers/espat"
|
||||
)
|
||||
|
||||
var cfg = espat.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// UART
|
||||
Uart: machine.UART1,
|
||||
Tx: machine.UART1_TX_PIN,
|
||||
Rx: machine.UART1_RX_PIN,
|
||||
}
|
||||
|
||||
var netdev = espat.New(&cfg)
|
||||
@@ -4,6 +4,8 @@
|
||||
//
|
||||
// nc -lk 8080
|
||||
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal || challenger_rp2040
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -15,7 +17,9 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers"
|
||||
"tinygo.org/x/drivers/netdev"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -25,12 +29,20 @@ var (
|
||||
)
|
||||
|
||||
var buf = &bytes.Buffer{}
|
||||
var link netlink.Netlinker
|
||||
var dev netdev.Netdever
|
||||
|
||||
func main() {
|
||||
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, dev = probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -48,9 +60,9 @@ func sendBatch() {
|
||||
|
||||
// make TCP connection
|
||||
message("---------------\r\nDialing TCP connection")
|
||||
fd, _ := netdev.Socket(drivers.AF_INET, drivers.SOCK_STREAM, drivers.IPPROTO_TCP)
|
||||
err := netdev.Connect(fd, "", ip, port)
|
||||
for ; err != nil; err = netdev.Connect(fd, "", ip, port) {
|
||||
fd, _ := dev.Socket(netdev.AF_INET, netdev.SOCK_STREAM, netdev.IPPROTO_TCP)
|
||||
err := dev.Connect(fd, "", ip, port)
|
||||
for ; err != nil; err = dev.Connect(fd, "", ip, port) {
|
||||
message(err.Error())
|
||||
time.Sleep(5 * time.Second)
|
||||
}
|
||||
@@ -67,7 +79,7 @@ func sendBatch() {
|
||||
fmt.Fprint(buf,
|
||||
"\r---------------------------- i == ", i, " ----------------------------"+
|
||||
"\r---------------------------- i == ", i, " ----------------------------")
|
||||
if w, err = netdev.Send(fd, buf.Bytes(), 0, time.Time{}); err != nil {
|
||||
if w, err = dev.Send(fd, buf.Bytes(), 0, time.Time{}); err != nil {
|
||||
println("error:", err.Error(), "\r")
|
||||
break
|
||||
}
|
||||
@@ -79,12 +91,12 @@ func sendBatch() {
|
||||
fmt.Fprint(buf, "\nWrote ", n, " bytes in ", ms, " ms\r\n")
|
||||
message(buf.String())
|
||||
|
||||
if _, err := netdev.Send(fd, buf.Bytes(), 0, time.Time{}); err != nil {
|
||||
if _, err := dev.Send(fd, buf.Bytes(), 0, time.Time{}); err != nil {
|
||||
println("error:", err.Error(), "\r")
|
||||
}
|
||||
|
||||
println("Disconnecting TCP...")
|
||||
netdev.Close(fd)
|
||||
dev.Close(fd)
|
||||
}
|
||||
|
||||
func message(msg string) {
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal arduino_nano33 nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -1,23 +0,0 @@
|
||||
//go:build challenger_rp2040
|
||||
|
||||
// +build: challenger_rp2040
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
|
||||
"tinygo.org/x/drivers/espat"
|
||||
)
|
||||
|
||||
var cfg = espat.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// UART
|
||||
Uart: machine.UART1,
|
||||
Tx: machine.UART1_TX_PIN,
|
||||
Rx: machine.UART1_RX_PIN,
|
||||
}
|
||||
|
||||
var netdev = espat.New(&cfg)
|
||||
@@ -5,6 +5,8 @@
|
||||
//
|
||||
// nc -lk 8080
|
||||
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal || challenger_rp2040 || pico
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -14,6 +16,9 @@ import (
|
||||
"machine"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -28,7 +33,13 @@ func main() {
|
||||
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal arduino_nano33 nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -7,6 +7,8 @@
|
||||
//
|
||||
// $ nc 10.0.0.2 8080 <file >copy ; cmp file copy
|
||||
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -14,6 +16,9 @@ import (
|
||||
"log"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -36,7 +41,13 @@ func main() {
|
||||
|
||||
time.Sleep(time.Second)
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal arduino_nano33 nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -5,6 +5,8 @@
|
||||
//
|
||||
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -17,6 +19,9 @@ import (
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -80,7 +85,13 @@ func makeRequest() {
|
||||
func main() {
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal arduino_nano33 nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -6,8 +6,6 @@
|
||||
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -21,9 +19,9 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers"
|
||||
"tinygo.org/x/drivers/ili9341"
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
"tinygo.org/x/tinyfont/proggy"
|
||||
"tinygo.org/x/tinyterm"
|
||||
)
|
||||
@@ -34,18 +32,6 @@ var (
|
||||
)
|
||||
|
||||
var (
|
||||
netcfg = rtl8720dn.Config{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
}
|
||||
|
||||
netdev = rtl8720dn.New(&netcfg)
|
||||
|
||||
display = ili9341.NewSPI(
|
||||
machine.SPI3,
|
||||
machine.LCD_DC,
|
||||
@@ -66,17 +52,6 @@ var (
|
||||
font = &proggy.TinySZ8pt7b
|
||||
)
|
||||
|
||||
func notify(e drivers.NetlinkEvent) {
|
||||
switch e {
|
||||
case drivers.NetlinkEventNetUp:
|
||||
fmt.Println("Wifi connection UP")
|
||||
fmt.Fprintf(terminal, "Wifi connection UP")
|
||||
case drivers.NetlinkEventNetDown:
|
||||
fmt.Println("Wifi connection DOWN")
|
||||
fmt.Fprintf(terminal, "Wifi connection DOWN")
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
machine.SPI3.Configure(machine.SPIConfig{
|
||||
@@ -100,9 +75,13 @@ func main() {
|
||||
|
||||
fmt.Fprintf(terminal, "Connecting to %s...\r\n", ssid)
|
||||
|
||||
netdev.NetNotify(notify)
|
||||
link, _ := probe.Probe()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
// }
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -28,6 +30,9 @@ import (
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -91,7 +96,13 @@ func closeConnection() {
|
||||
func main() {
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal arduino_nano33 nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -6,6 +6,8 @@
|
||||
// Note: It may be necessary to increase the stack size when using "net/http".
|
||||
// Use the -stack-size=4KB command line option.
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -15,6 +17,9 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -37,7 +42,13 @@ func main() {
|
||||
|
||||
led.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -48,7 +59,7 @@ func main() {
|
||||
http.HandleFunc("/off", LED_OFF)
|
||||
http.HandleFunc("/on", LED_ON)
|
||||
|
||||
err := http.ListenAndServe(port, nil)
|
||||
err = http.ListenAndServe(port, nil)
|
||||
for err != nil {
|
||||
fmt.Printf("error: %s\r\n", err.Error())
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -6,6 +6,8 @@
|
||||
// Note: It may be necessary to increase the stack size when using
|
||||
// "golang.org/x/net/websocket". Use the -stack-size=4KB command line option.
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -15,6 +17,8 @@ import (
|
||||
"time"
|
||||
|
||||
"golang.org/x/net/websocket"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -33,7 +37,13 @@ func waitSerial() {
|
||||
func main() {
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -6,6 +6,8 @@
|
||||
// Note: It may be necessary to increase the stack size when using
|
||||
// "golang.org/x/net/websocket". Use the -stack-size=4KB command line option.
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -16,6 +18,8 @@ import (
|
||||
"time"
|
||||
|
||||
"golang.org/x/net/websocket"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -40,12 +44,18 @@ func waitSerial() {
|
||||
func main() {
|
||||
waitSerial()
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
http.Handle("/echo", websocket.Handler(EchoServer))
|
||||
err := http.ListenAndServe(port, nil)
|
||||
err = http.ListenAndServe(port, nil)
|
||||
if err != nil {
|
||||
panic("ListenAndServe: " + err.Error())
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -3,6 +3,8 @@
|
||||
// Note: It may be necessary to increase the stack size when using "net/http".
|
||||
// Use the -stack-size=4KB command line option.
|
||||
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4 || wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -10,6 +12,9 @@ import (
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/netlink/probe"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -25,7 +30,13 @@ func main() {
|
||||
// wait a bit for console
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
if err := netdev.NetConnect(); err != nil {
|
||||
link, _ := probe.Probe()
|
||||
|
||||
err := link.NetConnect(&netlink.ConnectParams{
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
//go:build wioterminal
|
||||
|
||||
// +build: wioterminal
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
var cfg = rtl8720dn.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = rtl8720dn.New(&cfg)
|
||||
@@ -1,33 +0,0 @@
|
||||
//go:build pyportal || nano_rp2040 || metro_m4_airlift || arduino_mkrwifi1010 || matrixportal_m4
|
||||
|
||||
// +build: pyportal nano_rp2040 metro_m4_airlift arduino_mkrwifi1010 matrixportal_m4
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
var cfg = wifinina.Config{
|
||||
// WiFi AP credentials
|
||||
Ssid: ssid,
|
||||
Passphrase: pass,
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// Watchdog (set to 0 to disable)
|
||||
WatchdogTimeout: time.Duration(20 * time.Second),
|
||||
}
|
||||
|
||||
var netdev = wifinina.New(&cfg)
|
||||
@@ -1,4 +1,6 @@
|
||||
package drivers
|
||||
// L3/L4 network/transport layer
|
||||
|
||||
package netdev
|
||||
|
||||
import (
|
||||
"errors"
|
||||
@@ -32,6 +34,7 @@ var (
|
||||
var (
|
||||
ErrFamilyNotSupported = errors.New("Address family not supported")
|
||||
ErrProtocolNotSupported = errors.New("Socket protocol/type not supported")
|
||||
ErrStartingDHCPClient = errors.New("Error starting DHPC client")
|
||||
ErrNoMoreSockets = errors.New("No more sockets")
|
||||
ErrClosingSocket = errors.New("Error closing socket")
|
||||
ErrNotSupported = errors.New("Not supported")
|
||||
@@ -47,29 +50,32 @@ func (e *timeoutError) Timeout() bool { return true }
|
||||
func (e *timeoutError) Temporary() bool { return true }
|
||||
|
||||
//go:linkname UseNetdev net.useNetdev
|
||||
func UseNetdev(dev netdever)
|
||||
func UseNetdev(dev Netdever)
|
||||
|
||||
// Netdev is TinyGo's network device driver model. Network drivers implement
|
||||
// the netdever interface, providing a common network I/O interface to TinyGo's
|
||||
// "net" package. The interface is modeled after the BSD socket interface.
|
||||
// net.Conn implementations (TCPConn, UDPConn, and TLSConn) use the netdev
|
||||
// interface for device I/O access.
|
||||
// Netdever is TinyGo's OSI L3/L4 network/transport layer interface. Network
|
||||
// drivers implement the Netdever interface, providing a common network L3/L4
|
||||
// interface to TinyGo's "net" package. net.Conn implementations (TCPConn,
|
||||
// UDPConn, and TLSConn) use the Netdever interface for device I/O access.
|
||||
//
|
||||
// A netdever is passed to the "net" package using UseNetdev().
|
||||
// A Netdever is passed to the "net" package using UseNetdev().
|
||||
//
|
||||
// Just like a net.Conn, multiple goroutines may invoke methods on a netdever
|
||||
// Just like a net.Conn, multiple goroutines may invoke methods on a Netdever
|
||||
// simultaneously.
|
||||
//
|
||||
// NOTE: The netdever interface is mirrored in tinygo/src/net/netdev.go.
|
||||
// NOTE: The Netdever interface is mirrored in tinygo/src/net/netdev.go.
|
||||
// NOTE: If making changes to this interface, mirror the changes in
|
||||
// NOTE: tinygo/src/net/netdev.go, and vice-versa.
|
||||
|
||||
type netdever interface {
|
||||
type Netdever interface {
|
||||
|
||||
// GetHostByName returns the IP address of either a hostname or IPv4
|
||||
// address in standard dot notation
|
||||
GetHostByName(name string) (net.IP, error)
|
||||
|
||||
// GetIPAddr returns IP address assigned to the interface, either by
|
||||
// DHCP or statically
|
||||
GetIPAddr() (net.IP, error)
|
||||
|
||||
// Berkely Sockets-like interface, Go-ified. See man page for socket(2), etc.
|
||||
Socket(domain int, stype int, protocol int) (int, error)
|
||||
Bind(sockfd int, ip net.IP, port int) error
|
||||
-49
@@ -1,49 +0,0 @@
|
||||
package drivers
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net"
|
||||
)
|
||||
|
||||
// NetConnect() errors
|
||||
var (
|
||||
ErrConnected = errors.New("Already connected")
|
||||
ErrConnectFailed = errors.New("Connect failed")
|
||||
ErrConnectTimeout = errors.New("Connect timed out")
|
||||
ErrMissingSSID = errors.New("Missing WiFi SSID")
|
||||
ErrStartingDHCPClient = errors.New("Error starting DHPC client")
|
||||
)
|
||||
|
||||
type NetlinkEvent int
|
||||
|
||||
// Netlink network events
|
||||
const (
|
||||
// The device's network connection is now UP
|
||||
NetlinkEventNetUp NetlinkEvent = iota
|
||||
// The device's network connection is now DOWN
|
||||
NetlinkEventNetDown
|
||||
)
|
||||
|
||||
// Network drivers (optionally) implement the Netlinker interface. This
|
||||
// interface is not used by TinyGo's "net" package, but rather provides the
|
||||
// TinyGo application direct access to the network device for common settings
|
||||
// and control that fall outside of netdev's socket interface.
|
||||
|
||||
type Netlinker interface {
|
||||
|
||||
// NetConnect device to IP network
|
||||
NetConnect() error
|
||||
|
||||
// NetDisconnect device from IP network
|
||||
NetDisconnect()
|
||||
|
||||
// NetNotify to register callback for network events
|
||||
NetNotify(func(NetlinkEvent))
|
||||
|
||||
// GetHardwareAddr returns device MAC address
|
||||
GetHardwareAddr() (net.HardwareAddr, error)
|
||||
|
||||
// GetIPAddr returns IP address assigned to device, either by DHCP or
|
||||
// statically
|
||||
GetIPAddr() (net.IP, error)
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
// L2 data link layer
|
||||
|
||||
package netlink
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrConnected = errors.New("Already connected")
|
||||
ErrConnectFailed = errors.New("Connect failed")
|
||||
ErrConnectTimeout = errors.New("Connect timed out")
|
||||
ErrMissingSSID = errors.New("Missing WiFi SSID")
|
||||
ErrAuthTypeNoGood = errors.New("Wifi authorization type not supported")
|
||||
ErrConnectModeNoGood = errors.New("Connect mode not supported")
|
||||
ErrNotSupported = errors.New("Not supported")
|
||||
)
|
||||
|
||||
type Event int
|
||||
|
||||
// Network events
|
||||
const (
|
||||
// The device's network connection is now UP
|
||||
EventNetUp Event = iota
|
||||
// The device's network connection is now DOWN
|
||||
EventNetDown
|
||||
)
|
||||
|
||||
type ConnectMode int
|
||||
|
||||
// Connect modes
|
||||
const (
|
||||
ConnectModeSTA = iota // Connect as Wifi station (default)
|
||||
ConnectModeAP // Connect as Wifi Access Point
|
||||
)
|
||||
|
||||
type AuthType int
|
||||
|
||||
// Wifi authorization types. Used when setting up an access point, or
|
||||
// connecting to an access point
|
||||
const (
|
||||
AuthTypeWPA2 = iota // WPA2 authorization (default)
|
||||
AuthTypeOpen // No authorization required (open)
|
||||
AuthTypeWPA // WPA authorization
|
||||
AuthTypeWPA2Mixed // WPA2/WPA mixed authorization
|
||||
)
|
||||
|
||||
const DefaultConnectTimeout = 10 * time.Second
|
||||
|
||||
type ConnectParams struct {
|
||||
// Connect mode
|
||||
ConnectMode
|
||||
// SSID of Wifi AP
|
||||
Ssid string
|
||||
// Passphrase of Wifi AP
|
||||
Passphrase string
|
||||
// Wifi authorization type
|
||||
AuthType
|
||||
// Wifi country code as two-char string. E.g. "XX" for world-wide,
|
||||
// "US" for USA, etc.
|
||||
Country string
|
||||
|
||||
// Retries is how many attempts to connect before returning with a
|
||||
// "Connect failed" error. Zero means infinite retries.
|
||||
Retries int
|
||||
|
||||
// Timeout duration for each connection attempt. The default zero
|
||||
// value means 10sec.
|
||||
ConnectTimeout time.Duration
|
||||
|
||||
// Watchdog ticker duration. On tick, the watchdog will check for
|
||||
// downed connection or hardware fault and try to recover the
|
||||
// connection. Set to zero to disable watchodog.
|
||||
WatchdogTimeout time.Duration
|
||||
}
|
||||
|
||||
// Netlinker is TinyGo's OSI L2 data link layer interface. Network device
|
||||
// drivers implement Netlinker to expose the device's L2 functionality.
|
||||
|
||||
type Netlinker interface {
|
||||
|
||||
// Connect device to network
|
||||
NetConnect(params *ConnectParams) error
|
||||
|
||||
// Disconnect device from network
|
||||
NetDisconnect()
|
||||
|
||||
// Notify to register callback for network events
|
||||
NetNotify(cb func(Event))
|
||||
|
||||
// GetHardwareAddr returns device MAC address
|
||||
GetHardwareAddr() (net.HardwareAddr, error)
|
||||
|
||||
// SendEth sends an Ethernet packet
|
||||
// TODO describe content of pkt
|
||||
SendEth(pkt []byte) error
|
||||
|
||||
// RecvEth callback function for receiving Ethernet pkt
|
||||
// TODO describe content of pkt
|
||||
RecvEthFunc(func(pkt []byte) error)
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
//go:build challenger_rp2040
|
||||
|
||||
package probe
|
||||
|
||||
import (
|
||||
"machine"
|
||||
|
||||
"tinygo.org/x/drivers/espat"
|
||||
"tinygo.org/x/drivers/netdev"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
)
|
||||
|
||||
func Probe() (netlink.Netlinker, netdev.Netdever) {
|
||||
|
||||
cfg := espat.Config{
|
||||
// UART
|
||||
Uart: machine.UART1,
|
||||
Tx: machine.UART1_TX_PIN,
|
||||
Rx: machine.UART1_RX_PIN,
|
||||
}
|
||||
|
||||
esp := espat.NewDevice(&cfg)
|
||||
netdev.UseNetdev(esp)
|
||||
|
||||
return esp, esp
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
//go:build arduino_mkrwifi1010
|
||||
|
||||
package probe
|
||||
|
||||
import (
|
||||
"machine"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers/netdev"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
func Probe() (netlink.Netlinker, netdev.Netdever) {
|
||||
|
||||
cfg := wifinina.Config{
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
// mMKR 1010 resets High
|
||||
ResetIsHigh: true,
|
||||
}
|
||||
|
||||
nina := wifinina.New(&cfg)
|
||||
netdev.UseNetdev(nina)
|
||||
|
||||
return nina, nina
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
//go:build wioterminal
|
||||
|
||||
package probe
|
||||
|
||||
import (
|
||||
"machine"
|
||||
|
||||
"tinygo.org/x/drivers/netdev"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/rtl8720dn"
|
||||
)
|
||||
|
||||
func Probe() (netlink.Netlinker, netdev.Netdever) {
|
||||
|
||||
cfg := rtl8720dn.Config{
|
||||
// Device
|
||||
En: machine.RTL8720D_CHIP_PU,
|
||||
// UART
|
||||
Uart: machine.UART3,
|
||||
Tx: machine.PB24,
|
||||
Rx: machine.PC24,
|
||||
Baudrate: 614400,
|
||||
}
|
||||
|
||||
rtl := rtl8720dn.New(&cfg)
|
||||
netdev.UseNetdev(rtl)
|
||||
|
||||
return rtl, rtl
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
//go:build pyportal || arduino_nano33 || nano_rp2040 || metro_m4_airlift || matrixportal_m4
|
||||
|
||||
package probe
|
||||
|
||||
import (
|
||||
"machine"
|
||||
|
||||
"tinygo.org/x/drivers/netdev"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
"tinygo.org/x/drivers/wifinina"
|
||||
)
|
||||
|
||||
func Probe() (netlink.Netlinker, netdev.Netdever) {
|
||||
|
||||
cfg := wifinina.Config{
|
||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||
Spi: machine.NINA_SPI,
|
||||
Freq: 8 * 1e6,
|
||||
Sdo: machine.NINA_SDO,
|
||||
Sdi: machine.NINA_SDI,
|
||||
Sck: machine.NINA_SCK,
|
||||
// Device pins
|
||||
Cs: machine.NINA_CS,
|
||||
Ack: machine.NINA_ACK,
|
||||
Gpio0: machine.NINA_GPIO0,
|
||||
Resetn: machine.NINA_RESETN,
|
||||
}
|
||||
|
||||
nina := wifinina.New(&cfg)
|
||||
netdev.UseNetdev(nina)
|
||||
|
||||
return nina, nina
|
||||
}
|
||||
+68
-77
@@ -16,7 +16,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers"
|
||||
"tinygo.org/x/drivers/netdev"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
)
|
||||
|
||||
var _debug debug = debugBasic
|
||||
@@ -42,10 +43,6 @@ type socket struct {
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
// AP creditials
|
||||
Ssid string
|
||||
Passphrase string
|
||||
|
||||
// Enable
|
||||
En machine.Pin
|
||||
|
||||
@@ -54,21 +51,11 @@ type Config struct {
|
||||
Tx machine.Pin
|
||||
Rx machine.Pin
|
||||
Baudrate uint32
|
||||
|
||||
// Retries is how many attempts to connect before returning with a
|
||||
// "Connect failed" error. Zero means infinite retries.
|
||||
Retries int
|
||||
|
||||
// Watchdog ticker duration. On tick, the watchdog will check for
|
||||
// downed connection and try to recover the connection. Default is
|
||||
// 0secs, which means no watchdog. Set to non-zero to enable
|
||||
// watchodog.
|
||||
WatchdogTimeout time.Duration
|
||||
}
|
||||
|
||||
type rtl8720dn struct {
|
||||
cfg *Config
|
||||
notifyCb func(drivers.NetlinkEvent)
|
||||
notifyCb func(netlink.Event)
|
||||
mu sync.Mutex
|
||||
|
||||
uart *machine.UART
|
||||
@@ -76,6 +63,8 @@ type rtl8720dn struct {
|
||||
|
||||
debug bool
|
||||
|
||||
params *netlink.ConnectParams
|
||||
|
||||
netConnected bool
|
||||
driverShown bool
|
||||
deviceShown bool
|
||||
@@ -91,46 +80,39 @@ func newSocket(protocol int) *socket {
|
||||
}
|
||||
|
||||
func New(cfg *Config) *rtl8720dn {
|
||||
r := rtl8720dn{
|
||||
return &rtl8720dn{
|
||||
debug: (_debug & debugRpc) != 0,
|
||||
cfg: cfg,
|
||||
sockets: make(map[sock]*socket),
|
||||
killWatchdog: make(chan bool),
|
||||
}
|
||||
|
||||
drivers.UseNetdev(&r)
|
||||
|
||||
// assert that rtl8720dn implements Netlinker
|
||||
var _ drivers.Netlinker = (*rtl8720dn)(nil)
|
||||
|
||||
return &r
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) startDhcpc() error {
|
||||
if result := r.rpc_tcpip_adapter_dhcpc_start(0); result == -1 {
|
||||
return drivers.ErrStartingDHCPClient
|
||||
return netdev.ErrStartingDHCPClient
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) connectToAP() error {
|
||||
|
||||
if len(r.cfg.Ssid) == 0 {
|
||||
return drivers.ErrMissingSSID
|
||||
if len(r.params.Ssid) == 0 {
|
||||
return netlink.ErrMissingSSID
|
||||
}
|
||||
|
||||
if debugging(debugBasic) {
|
||||
fmt.Printf("Connecting to Wifi SSID '%s'...", r.cfg.Ssid)
|
||||
fmt.Printf("Connecting to Wifi SSID '%s'...", r.params.Ssid)
|
||||
}
|
||||
|
||||
// Start the connection process
|
||||
securityType := uint32(0x00400004)
|
||||
result := r.rpc_wifi_connect(r.cfg.Ssid, r.cfg.Passphrase, securityType, -1, 0)
|
||||
result := r.rpc_wifi_connect(r.params.Ssid, r.params.Passphrase, securityType, -1, 0)
|
||||
if result == -1 {
|
||||
if debugging(debugBasic) {
|
||||
fmt.Printf("FAILED\r\n")
|
||||
}
|
||||
return drivers.ErrConnectFailed
|
||||
return netlink.ErrConnectFailed
|
||||
}
|
||||
|
||||
if debugging(debugBasic) {
|
||||
@@ -138,7 +120,7 @@ func (r *rtl8720dn) connectToAP() error {
|
||||
}
|
||||
|
||||
if r.notifyCb != nil {
|
||||
r.notifyCb(drivers.NetlinkEventNetUp)
|
||||
r.notifyCb(netlink.EventNetUp)
|
||||
}
|
||||
|
||||
return r.startDhcpc()
|
||||
@@ -226,7 +208,7 @@ func (r *rtl8720dn) networkDown() bool {
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) watchdog() {
|
||||
ticker := time.NewTicker(r.cfg.WatchdogTimeout)
|
||||
ticker := time.NewTicker(r.params.WatchdogTimeout)
|
||||
for {
|
||||
select {
|
||||
case <-r.killWatchdog:
|
||||
@@ -238,7 +220,7 @@ func (r *rtl8720dn) watchdog() {
|
||||
fmt.Printf("Watchdog: Wifi NOT CONNECTED, trying again...\r\n")
|
||||
}
|
||||
if r.notifyCb != nil {
|
||||
r.notifyCb(drivers.NetlinkEventNetDown)
|
||||
r.notifyCb(netlink.EventNetDown)
|
||||
}
|
||||
r.netConnect(false)
|
||||
}
|
||||
@@ -255,9 +237,9 @@ func (r *rtl8720dn) netConnect(reset bool) error {
|
||||
}
|
||||
r.showDevice()
|
||||
|
||||
for i := 0; r.cfg.Retries == 0 || i < r.cfg.Retries; i++ {
|
||||
for i := 0; r.params.Retries == 0 || i < r.params.Retries; i++ {
|
||||
if err := r.connectToAP(); err != nil {
|
||||
if err == drivers.ErrConnectFailed {
|
||||
if err == netlink.ErrConnectFailed {
|
||||
continue
|
||||
}
|
||||
return err
|
||||
@@ -266,22 +248,24 @@ func (r *rtl8720dn) netConnect(reset bool) error {
|
||||
}
|
||||
|
||||
if r.networkDown() {
|
||||
return drivers.ErrConnectFailed
|
||||
return netlink.ErrConnectFailed
|
||||
}
|
||||
|
||||
r.showIP()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) NetConnect() error {
|
||||
func (r *rtl8720dn) NetConnect(params *netlink.ConnectParams) error {
|
||||
|
||||
r.mu.Lock()
|
||||
defer r.mu.Unlock()
|
||||
|
||||
if r.netConnected {
|
||||
return drivers.ErrConnected
|
||||
return netlink.ErrConnected
|
||||
}
|
||||
|
||||
r.params = params
|
||||
|
||||
r.showDriver()
|
||||
|
||||
if err := r.netConnect(true); err != nil {
|
||||
@@ -290,7 +274,7 @@ func (r *rtl8720dn) NetConnect() error {
|
||||
|
||||
r.netConnected = true
|
||||
|
||||
if r.cfg.WatchdogTimeout != 0 {
|
||||
if r.params.WatchdogTimeout != 0 {
|
||||
go r.watchdog()
|
||||
}
|
||||
|
||||
@@ -310,7 +294,7 @@ func (r *rtl8720dn) NetDisconnect() {
|
||||
return
|
||||
}
|
||||
|
||||
if r.cfg.WatchdogTimeout != 0 {
|
||||
if r.params.WatchdogTimeout != 0 {
|
||||
r.killWatchdog <- true
|
||||
}
|
||||
r.netDisconnect()
|
||||
@@ -319,18 +303,25 @@ func (r *rtl8720dn) NetDisconnect() {
|
||||
r.netConnected = false
|
||||
|
||||
if debugging(debugBasic) {
|
||||
fmt.Printf("\r\nDisconnected from Wifi SSID '%s'\r\n\r\n", r.cfg.Ssid)
|
||||
fmt.Printf("\r\nDisconnected from Wifi SSID '%s'\r\n\r\n", r.params.Ssid)
|
||||
}
|
||||
|
||||
if r.notifyCb != nil {
|
||||
r.notifyCb(drivers.NetlinkEventNetDown)
|
||||
r.notifyCb(netlink.EventNetDown)
|
||||
}
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) NetNotify(cb func(drivers.NetlinkEvent)) {
|
||||
func (r *rtl8720dn) NetNotify(cb func(netlink.Event)) {
|
||||
r.notifyCb = cb
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) SendEth(pkt []byte) error {
|
||||
return netlink.ErrNotSupported
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) RecvEthFunc(cb func(pkt []byte) error) {
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) GetHostByName(name string) (net.IP, error) {
|
||||
|
||||
if debugging(debugNetdev) {
|
||||
@@ -343,7 +334,7 @@ func (r *rtl8720dn) GetHostByName(name string) (net.IP, error) {
|
||||
var ip [4]byte
|
||||
result := r.rpc_netconn_gethostbyname(name, ip[:])
|
||||
if result == -1 {
|
||||
return net.IP{}, drivers.ErrHostUnknown
|
||||
return net.IP{}, netdev.ErrHostUnknown
|
||||
}
|
||||
|
||||
return net.IP(ip[:]), nil
|
||||
@@ -396,9 +387,9 @@ func (r *rtl8720dn) Socket(domain int, stype int, protocol int) (int, error) {
|
||||
}
|
||||
|
||||
switch domain {
|
||||
case drivers.AF_INET:
|
||||
case netdev.AF_INET:
|
||||
default:
|
||||
return -1, drivers.ErrFamilyNotSupported
|
||||
return -1, netdev.ErrFamilyNotSupported
|
||||
}
|
||||
|
||||
var newSock int32
|
||||
@@ -407,22 +398,22 @@ func (r *rtl8720dn) Socket(domain int, stype int, protocol int) (int, error) {
|
||||
defer r.mu.Unlock()
|
||||
|
||||
switch {
|
||||
case protocol == drivers.IPPROTO_TCP && stype == drivers.SOCK_STREAM:
|
||||
newSock = r.rpc_lwip_socket(drivers.AF_INET, drivers.SOCK_STREAM,
|
||||
drivers.IPPROTO_TCP)
|
||||
case protocol == drivers.IPPROTO_TLS && stype == drivers.SOCK_STREAM:
|
||||
case protocol == netdev.IPPROTO_TCP && stype == netdev.SOCK_STREAM:
|
||||
newSock = r.rpc_lwip_socket(netdev.AF_INET, netdev.SOCK_STREAM,
|
||||
netdev.IPPROTO_TCP)
|
||||
case protocol == netdev.IPPROTO_TLS && stype == netdev.SOCK_STREAM:
|
||||
// TODO Investigate: using client number as socket number;
|
||||
// TODO this may cause a problem if mixing TLS and non-TLS sockets?
|
||||
newSock = int32(r.clientTLS())
|
||||
case protocol == drivers.IPPROTO_UDP && stype == drivers.SOCK_DGRAM:
|
||||
newSock = r.rpc_lwip_socket(drivers.AF_INET, drivers.SOCK_DGRAM,
|
||||
drivers.IPPROTO_UDP)
|
||||
case protocol == netdev.IPPROTO_UDP && stype == netdev.SOCK_DGRAM:
|
||||
newSock = r.rpc_lwip_socket(netdev.AF_INET, netdev.SOCK_DGRAM,
|
||||
netdev.IPPROTO_UDP)
|
||||
default:
|
||||
return -1, drivers.ErrProtocolNotSupported
|
||||
return -1, netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
if newSock == -1 {
|
||||
return -1, drivers.ErrNoMoreSockets
|
||||
return -1, netdev.ErrNoMoreSockets
|
||||
}
|
||||
|
||||
socket := newSocket(protocol)
|
||||
@@ -434,7 +425,7 @@ func (r *rtl8720dn) Socket(domain int, stype int, protocol int) (int, error) {
|
||||
func addrToName(ip net.IP, port int) []byte {
|
||||
name := make([]byte, 16)
|
||||
name[0] = 0x00
|
||||
name[1] = drivers.AF_INET
|
||||
name[1] = netdev.AF_INET
|
||||
name[2] = byte(port >> 8)
|
||||
name[3] = byte(port)
|
||||
if len(ip) == 4 {
|
||||
@@ -461,13 +452,13 @@ func (r *rtl8720dn) Bind(sockfd int, ip net.IP, port int) error {
|
||||
var name = addrToName(ip, port)
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP, drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_TCP, netdev.IPPROTO_UDP:
|
||||
result := r.rpc_lwip_bind(int32(sock), name, uint32(len(name)))
|
||||
if result == -1 {
|
||||
return fmt.Errorf("Bind to %s:%d failed", ip, port)
|
||||
}
|
||||
default:
|
||||
return drivers.ErrProtocolNotSupported
|
||||
return netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -492,12 +483,12 @@ func (r *rtl8720dn) Connect(sockfd int, host string, ip net.IP, port int) error
|
||||
|
||||
// Start the connection
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP, drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_TCP, netdev.IPPROTO_UDP:
|
||||
result := r.rpc_lwip_connect(int32(sock), name, uint32(len(name)))
|
||||
if result == -1 {
|
||||
return fmt.Errorf("Connect to %s:%d failed", ip, port)
|
||||
}
|
||||
case drivers.IPPROTO_TLS:
|
||||
case netdev.IPPROTO_TLS:
|
||||
result := r.rpc_wifi_start_ssl_client(uint32(sock),
|
||||
host, uint32(port), 0)
|
||||
if result == -1 {
|
||||
@@ -521,22 +512,22 @@ func (r *rtl8720dn) Listen(sockfd int, backlog int) error {
|
||||
var socket = r.sockets[sock]
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP:
|
||||
case netdev.IPPROTO_TCP:
|
||||
result := r.rpc_lwip_listen(int32(sock), int32(backlog))
|
||||
if result == -1 {
|
||||
return fmt.Errorf("Listen failed")
|
||||
}
|
||||
result = r.rpc_lwip_fcntl(int32(sock), drivers.F_SETFL, O_NONBLOCK)
|
||||
result = r.rpc_lwip_fcntl(int32(sock), netdev.F_SETFL, O_NONBLOCK)
|
||||
if result == -1 {
|
||||
return fmt.Errorf("Fcntl failed")
|
||||
}
|
||||
case drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_UDP:
|
||||
result := r.rpc_lwip_listen(int32(sock), int32(backlog))
|
||||
if result == -1 {
|
||||
return fmt.Errorf("Listen failed")
|
||||
}
|
||||
default:
|
||||
return drivers.ErrProtocolNotSupported
|
||||
return netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -557,9 +548,9 @@ func (r *rtl8720dn) Accept(sockfd int, ip net.IP, port int) (int, error) {
|
||||
var addr = addrToName(ip, port)
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP:
|
||||
case netdev.IPPROTO_TCP:
|
||||
default:
|
||||
return -1, drivers.ErrProtocolNotSupported
|
||||
return -1, netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
for {
|
||||
@@ -606,18 +597,18 @@ func (r *rtl8720dn) sendChunk(sockfd int, buf []byte, deadline time.Time) (int,
|
||||
// Check if we've timed out
|
||||
if !deadline.IsZero() {
|
||||
if time.Now().After(deadline) {
|
||||
return -1, drivers.ErrTimeout
|
||||
return -1, netdev.ErrTimeout
|
||||
}
|
||||
}
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP, drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_TCP, netdev.IPPROTO_UDP:
|
||||
result := r.rpc_lwip_send(int32(sock), buf, 0x00000008)
|
||||
if result == -1 {
|
||||
return -1, fmt.Errorf("Send error")
|
||||
}
|
||||
return int(result), nil
|
||||
case drivers.IPPROTO_TLS:
|
||||
case netdev.IPPROTO_TLS:
|
||||
result := r.rpc_wifi_send_ssl_data(uint32(sock), buf, uint16(len(buf)))
|
||||
if result == -1 {
|
||||
return -1, fmt.Errorf("TLS Send error")
|
||||
@@ -625,7 +616,7 @@ func (r *rtl8720dn) sendChunk(sockfd int, buf []byte, deadline time.Time) (int,
|
||||
return int(result), nil
|
||||
}
|
||||
|
||||
return -1, drivers.ErrProtocolNotSupported
|
||||
return -1, netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) Send(sockfd int, buf []byte, flags int,
|
||||
@@ -681,15 +672,15 @@ func (r *rtl8720dn) Recv(sockfd int, buf []byte, flags int,
|
||||
// Check if we've timed out
|
||||
if !deadline.IsZero() {
|
||||
if time.Now().After(deadline) {
|
||||
return -1, drivers.ErrTimeout
|
||||
return -1, netdev.ErrTimeout
|
||||
}
|
||||
}
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP, drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_TCP, netdev.IPPROTO_UDP:
|
||||
n = r.rpc_lwip_recv(int32(sock), buf[:length],
|
||||
uint32(length), 0x00000008, 0)
|
||||
case drivers.IPPROTO_TLS:
|
||||
case netdev.IPPROTO_TLS:
|
||||
n = r.rpc_wifi_get_ssl_receive(uint32(sock),
|
||||
buf[:length], int32(length))
|
||||
}
|
||||
@@ -734,15 +725,15 @@ func (r *rtl8720dn) Close(sockfd int) error {
|
||||
}
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP, drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_TCP, netdev.IPPROTO_UDP:
|
||||
result = r.rpc_lwip_close(int32(sock))
|
||||
case drivers.IPPROTO_TLS:
|
||||
case netdev.IPPROTO_TLS:
|
||||
r.rpc_wifi_stop_ssl_socket(uint32(sock))
|
||||
r.rpc_wifi_ssl_client_destroy(uint32(sock))
|
||||
}
|
||||
|
||||
if result == -1 {
|
||||
return drivers.ErrClosingSocket
|
||||
return netdev.ErrClosingSocket
|
||||
}
|
||||
|
||||
socket.inuse = false
|
||||
@@ -756,7 +747,7 @@ func (r *rtl8720dn) SetSockOpt(sockfd int, level int, opt int, value interface{}
|
||||
fmt.Printf("[SetSockOpt] sockfd: %d\r\n", sockfd)
|
||||
}
|
||||
|
||||
return drivers.ErrNotSupported
|
||||
return netdev.ErrNotSupported
|
||||
}
|
||||
|
||||
func (r *rtl8720dn) disconnect() error {
|
||||
|
||||
+70
-78
@@ -21,6 +21,8 @@ import (
|
||||
"time"
|
||||
|
||||
"tinygo.org/x/drivers"
|
||||
"tinygo.org/x/drivers/netdev"
|
||||
"tinygo.org/x/drivers/netlink"
|
||||
)
|
||||
|
||||
var _debug debug = debugBasic
|
||||
@@ -168,10 +170,6 @@ type socket struct {
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
// AP creditials
|
||||
Ssid string
|
||||
Passphrase string
|
||||
|
||||
// SPI config
|
||||
Spi drivers.SPI
|
||||
Freq uint32
|
||||
@@ -189,24 +187,11 @@ type Config struct {
|
||||
// Arduino MKR 1010, where the reset signal needs to go high instead of
|
||||
// low.
|
||||
ResetIsHigh bool
|
||||
|
||||
// Retries is how many attempts to connect before returning with a
|
||||
// "Connect failed" error. Zero means infinite retries.
|
||||
Retries int
|
||||
|
||||
// Timeout duration for each connection attempt. Default is 10sec.
|
||||
ConnectTimeout time.Duration
|
||||
|
||||
// Watchdog ticker duration. On tick, the watchdog will check for
|
||||
// downed connection or hardware fault and try to recover the
|
||||
// connection. Default is 0secs, which means no watchdog. Set to
|
||||
// non-zero to enable watchodog.
|
||||
WatchdogTimeout time.Duration
|
||||
}
|
||||
|
||||
type wifinina struct {
|
||||
cfg *Config
|
||||
notifyCb func(drivers.NetlinkEvent)
|
||||
notifyCb func(netlink.Event)
|
||||
mu sync.Mutex
|
||||
|
||||
spi drivers.SPI
|
||||
@@ -218,6 +203,8 @@ type wifinina struct {
|
||||
buf [64]byte
|
||||
ssids [maxNetworks]string
|
||||
|
||||
params *netlink.ConnectParams
|
||||
|
||||
netConnected bool
|
||||
driverShown bool
|
||||
deviceShown bool
|
||||
@@ -244,15 +231,6 @@ func New(cfg *Config) *wifinina {
|
||||
resetn: cfg.Resetn,
|
||||
}
|
||||
|
||||
if w.cfg.ConnectTimeout == 0 {
|
||||
w.cfg.ConnectTimeout = 10 * time.Second
|
||||
}
|
||||
|
||||
drivers.UseNetdev(&w)
|
||||
|
||||
// assert that wifinina implements Netlinker
|
||||
var _ drivers.Netlinker = (*wifinina)(nil)
|
||||
|
||||
return &w
|
||||
}
|
||||
|
||||
@@ -273,20 +251,25 @@ func (w *wifinina) reason() string {
|
||||
return fmt.Sprintf("%d", reason)
|
||||
}
|
||||
|
||||
func (w *wifinina) connectToAP(timeout time.Duration) error {
|
||||
func (w *wifinina) connectToAP() error {
|
||||
|
||||
if len(w.cfg.Ssid) == 0 {
|
||||
return drivers.ErrMissingSSID
|
||||
timeout := w.params.ConnectTimeout
|
||||
if timeout == 0 {
|
||||
timeout = netlink.DefaultConnectTimeout
|
||||
}
|
||||
|
||||
if len(w.params.Ssid) == 0 {
|
||||
return netlink.ErrMissingSSID
|
||||
}
|
||||
|
||||
if debugging(debugBasic) {
|
||||
fmt.Printf("Connecting to Wifi SSID '%s'...", w.cfg.Ssid)
|
||||
fmt.Printf("Connecting to Wifi SSID '%s'...", w.params.Ssid)
|
||||
}
|
||||
|
||||
start := time.Now()
|
||||
|
||||
// Start the connection process
|
||||
w.setPassphrase(w.cfg.Ssid, w.cfg.Passphrase)
|
||||
w.setPassphrase(w.params.Ssid, w.params.Passphrase)
|
||||
|
||||
// Check if we connected
|
||||
for {
|
||||
@@ -297,14 +280,14 @@ func (w *wifinina) connectToAP(timeout time.Duration) error {
|
||||
fmt.Printf("CONNECTED\r\n")
|
||||
}
|
||||
if w.notifyCb != nil {
|
||||
w.notifyCb(drivers.NetlinkEventNetUp)
|
||||
w.notifyCb(netlink.EventNetUp)
|
||||
}
|
||||
return nil
|
||||
case statusConnectFailed:
|
||||
if debugging(debugBasic) {
|
||||
fmt.Printf("FAILED (%s)\r\n", w.reason())
|
||||
}
|
||||
return drivers.ErrConnectFailed
|
||||
return netlink.ErrConnectFailed
|
||||
}
|
||||
if time.Since(start) > timeout {
|
||||
break
|
||||
@@ -316,7 +299,7 @@ func (w *wifinina) connectToAP(timeout time.Duration) error {
|
||||
fmt.Printf("FAILED (timed out)\r\n")
|
||||
}
|
||||
|
||||
return drivers.ErrConnectTimeout
|
||||
return netlink.ErrConnectTimeout
|
||||
}
|
||||
|
||||
func (w *wifinina) netDisconnect() {
|
||||
@@ -404,7 +387,7 @@ func (w *wifinina) networkDown() bool {
|
||||
}
|
||||
|
||||
func (w *wifinina) watchdog() {
|
||||
ticker := time.NewTicker(w.cfg.WatchdogTimeout)
|
||||
ticker := time.NewTicker(w.params.WatchdogTimeout)
|
||||
for {
|
||||
select {
|
||||
case <-w.killWatchdog:
|
||||
@@ -423,7 +406,7 @@ func (w *wifinina) watchdog() {
|
||||
fmt.Printf("Watchdog: Wifi NOT CONNECTED, trying again...\r\n")
|
||||
}
|
||||
if w.notifyCb != nil {
|
||||
w.notifyCb(drivers.NetlinkEventNetDown)
|
||||
w.notifyCb(netlink.EventNetDown)
|
||||
}
|
||||
w.netConnect(false)
|
||||
}
|
||||
@@ -438,10 +421,10 @@ func (w *wifinina) netConnect(reset bool) error {
|
||||
}
|
||||
w.showDevice()
|
||||
|
||||
for i := 0; w.cfg.Retries == 0 || i < w.cfg.Retries; i++ {
|
||||
if err := w.connectToAP(w.cfg.ConnectTimeout); err != nil {
|
||||
for i := 0; w.params.Retries == 0 || i < w.params.Retries; i++ {
|
||||
if err := w.connectToAP(); err != nil {
|
||||
switch err {
|
||||
case drivers.ErrConnectTimeout, drivers.ErrConnectFailed:
|
||||
case netlink.ErrConnectTimeout, netlink.ErrConnectFailed:
|
||||
continue
|
||||
}
|
||||
return err
|
||||
@@ -450,22 +433,24 @@ func (w *wifinina) netConnect(reset bool) error {
|
||||
}
|
||||
|
||||
if w.networkDown() {
|
||||
return drivers.ErrConnectFailed
|
||||
return netlink.ErrConnectFailed
|
||||
}
|
||||
|
||||
w.showIP()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (w *wifinina) NetConnect() error {
|
||||
func (w *wifinina) NetConnect(params *netlink.ConnectParams) error {
|
||||
|
||||
w.mu.Lock()
|
||||
defer w.mu.Unlock()
|
||||
|
||||
if w.netConnected {
|
||||
return drivers.ErrConnected
|
||||
return netlink.ErrConnected
|
||||
}
|
||||
|
||||
w.params = params
|
||||
|
||||
w.showDriver()
|
||||
w.setupSPI()
|
||||
|
||||
@@ -475,7 +460,7 @@ func (w *wifinina) NetConnect() error {
|
||||
|
||||
w.netConnected = true
|
||||
|
||||
if w.cfg.WatchdogTimeout != 0 {
|
||||
if w.params.WatchdogTimeout != 0 {
|
||||
go w.watchdog()
|
||||
}
|
||||
|
||||
@@ -491,7 +476,7 @@ func (w *wifinina) NetDisconnect() {
|
||||
return
|
||||
}
|
||||
|
||||
if w.cfg.WatchdogTimeout != 0 {
|
||||
if w.params.WatchdogTimeout != 0 {
|
||||
w.killWatchdog <- true
|
||||
}
|
||||
|
||||
@@ -501,18 +486,25 @@ func (w *wifinina) NetDisconnect() {
|
||||
w.netConnected = false
|
||||
|
||||
if debugging(debugBasic) {
|
||||
fmt.Printf("\r\nDisconnected from Wifi SSID '%s'\r\n\r\n", w.cfg.Ssid)
|
||||
fmt.Printf("\r\nDisconnected from Wifi SSID '%s'\r\n\r\n", w.params.Ssid)
|
||||
}
|
||||
|
||||
if w.notifyCb != nil {
|
||||
w.notifyCb(drivers.NetlinkEventNetDown)
|
||||
w.notifyCb(netlink.EventNetDown)
|
||||
}
|
||||
}
|
||||
|
||||
func (w *wifinina) NetNotify(cb func(drivers.NetlinkEvent)) {
|
||||
func (w *wifinina) NetNotify(cb func(netlink.Event)) {
|
||||
w.notifyCb = cb
|
||||
}
|
||||
|
||||
func (w *wifinina) SendEth(pkt []byte) error {
|
||||
return netlink.ErrNotSupported
|
||||
}
|
||||
|
||||
func (w *wifinina) RecvEthFunc(cb func(pkt []byte) error) {
|
||||
}
|
||||
|
||||
func (w *wifinina) GetHostByName(name string) (net.IP, error) {
|
||||
|
||||
if debugging(debugNetdev) {
|
||||
@@ -524,7 +516,7 @@ func (w *wifinina) GetHostByName(name string) (net.IP, error) {
|
||||
|
||||
ip := w.getHostByName(name)
|
||||
if ip == "" {
|
||||
return net.IP{}, drivers.ErrHostUnknown
|
||||
return net.IP{}, netdev.ErrHostUnknown
|
||||
}
|
||||
|
||||
return net.IP([]byte(ip)), nil
|
||||
@@ -567,17 +559,17 @@ func (w *wifinina) Socket(domain int, stype int, protocol int) (int, error) {
|
||||
}
|
||||
|
||||
switch domain {
|
||||
case drivers.AF_INET:
|
||||
case netdev.AF_INET:
|
||||
default:
|
||||
return -1, drivers.ErrFamilyNotSupported
|
||||
return -1, netdev.ErrFamilyNotSupported
|
||||
}
|
||||
|
||||
switch {
|
||||
case protocol == drivers.IPPROTO_TCP && stype == drivers.SOCK_STREAM:
|
||||
case protocol == drivers.IPPROTO_TLS && stype == drivers.SOCK_STREAM:
|
||||
case protocol == drivers.IPPROTO_UDP && stype == drivers.SOCK_DGRAM:
|
||||
case protocol == netdev.IPPROTO_TCP && stype == netdev.SOCK_STREAM:
|
||||
case protocol == netdev.IPPROTO_TLS && stype == netdev.SOCK_STREAM:
|
||||
case protocol == netdev.IPPROTO_UDP && stype == netdev.SOCK_DGRAM:
|
||||
default:
|
||||
return -1, drivers.ErrProtocolNotSupported
|
||||
return -1, netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
w.mu.Lock()
|
||||
@@ -585,7 +577,7 @@ func (w *wifinina) Socket(domain int, stype int, protocol int) (int, error) {
|
||||
|
||||
sock := w.getSocket()
|
||||
if sock == noSocketAvail {
|
||||
return -1, drivers.ErrNoMoreSockets
|
||||
return -1, netdev.ErrNoMoreSockets
|
||||
}
|
||||
|
||||
socket := newSocket(protocol)
|
||||
@@ -607,9 +599,9 @@ func (w *wifinina) Bind(sockfd int, ip net.IP, port int) error {
|
||||
var socket = w.sockets[sock]
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP:
|
||||
case drivers.IPPROTO_TLS:
|
||||
case drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_TCP:
|
||||
case netdev.IPPROTO_TLS:
|
||||
case netdev.IPPROTO_UDP:
|
||||
w.startServer(sock, uint16(port), protoModeUDP)
|
||||
}
|
||||
|
||||
@@ -644,11 +636,11 @@ func (w *wifinina) Connect(sockfd int, host string, ip net.IP, port int) error {
|
||||
|
||||
// Start the connection
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP:
|
||||
case netdev.IPPROTO_TCP:
|
||||
w.startClient(sock, "", toUint32(ip), uint16(port), protoModeTCP)
|
||||
case drivers.IPPROTO_TLS:
|
||||
case netdev.IPPROTO_TLS:
|
||||
w.startClient(sock, host, 0, uint16(port), protoModeTLS)
|
||||
case drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_UDP:
|
||||
w.startClient(sock, "", toUint32(ip), uint16(port), protoModeUDP)
|
||||
return nil
|
||||
}
|
||||
@@ -677,11 +669,11 @@ func (w *wifinina) Listen(sockfd int, backlog int) error {
|
||||
var socket = w.sockets[sock]
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP:
|
||||
case netdev.IPPROTO_TCP:
|
||||
w.startServer(sock, uint16(socket.port), protoModeTCP)
|
||||
case drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_UDP:
|
||||
default:
|
||||
return drivers.ErrProtocolNotSupported
|
||||
return netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -701,9 +693,9 @@ func (w *wifinina) Accept(sockfd int, ip net.IP, port int) (int, error) {
|
||||
var socket = w.sockets[sock]
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP:
|
||||
case netdev.IPPROTO_TCP:
|
||||
default:
|
||||
return -1, drivers.ErrProtocolNotSupported
|
||||
return -1, netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
for {
|
||||
@@ -754,7 +746,7 @@ func (w *wifinina) Accept(sockfd int, ip net.IP, port int) (int, error) {
|
||||
|
||||
func (w *wifinina) sockDown(sock sock) bool {
|
||||
var socket = w.sockets[sock]
|
||||
if socket.protocol == drivers.IPPROTO_UDP {
|
||||
if socket.protocol == netdev.IPPROTO_UDP {
|
||||
return false
|
||||
}
|
||||
return w.getClientState(sock) != tcpStateEstablished
|
||||
@@ -780,7 +772,7 @@ func (w *wifinina) sendTCP(sock sock, buf []byte, deadline time.Time) (int, erro
|
||||
// Check if we've timed out
|
||||
if !deadline.IsZero() {
|
||||
if time.Now().After(deadline) {
|
||||
return -1, drivers.ErrTimeout
|
||||
return -1, netdev.ErrTimeout
|
||||
}
|
||||
}
|
||||
|
||||
@@ -800,7 +792,7 @@ func (w *wifinina) sendTCP(sock sock, buf []byte, deadline time.Time) (int, erro
|
||||
w.mu.Lock()
|
||||
}
|
||||
|
||||
return -1, drivers.ErrTimeout
|
||||
return -1, netdev.ErrTimeout
|
||||
}
|
||||
|
||||
func (w *wifinina) sendUDP(sock sock, buf []byte, deadline time.Time) (int, error) {
|
||||
@@ -827,18 +819,18 @@ func (w *wifinina) sendChunk(sockfd int, buf []byte, deadline time.Time) (int, e
|
||||
// Check if we've timed out
|
||||
if !deadline.IsZero() {
|
||||
if time.Now().After(deadline) {
|
||||
return -1, drivers.ErrTimeout
|
||||
return -1, netdev.ErrTimeout
|
||||
}
|
||||
}
|
||||
|
||||
switch socket.protocol {
|
||||
case drivers.IPPROTO_TCP, drivers.IPPROTO_TLS:
|
||||
case netdev.IPPROTO_TCP, netdev.IPPROTO_TLS:
|
||||
return w.sendTCP(sock, buf, deadline)
|
||||
case drivers.IPPROTO_UDP:
|
||||
case netdev.IPPROTO_UDP:
|
||||
return w.sendUDP(sock, buf, deadline)
|
||||
}
|
||||
|
||||
return -1, drivers.ErrProtocolNotSupported
|
||||
return -1, netdev.ErrProtocolNotSupported
|
||||
}
|
||||
|
||||
func (w *wifinina) Send(sockfd int, buf []byte, flags int,
|
||||
@@ -892,7 +884,7 @@ func (w *wifinina) Recv(sockfd int, buf []byte, flags int,
|
||||
// Check if we've timed out
|
||||
if !deadline.IsZero() {
|
||||
if time.Now().After(deadline) {
|
||||
return -1, drivers.ErrTimeout
|
||||
return -1, netdev.ErrTimeout
|
||||
}
|
||||
}
|
||||
|
||||
@@ -954,7 +946,7 @@ func (w *wifinina) Close(sockfd int) error {
|
||||
|
||||
w.stopClient(sock)
|
||||
|
||||
if socket.protocol == drivers.IPPROTO_UDP {
|
||||
if socket.protocol == netdev.IPPROTO_UDP {
|
||||
socket.inuse = false
|
||||
return nil
|
||||
}
|
||||
@@ -972,7 +964,7 @@ func (w *wifinina) Close(sockfd int) error {
|
||||
w.mu.Lock()
|
||||
}
|
||||
|
||||
return drivers.ErrClosingSocket
|
||||
return netdev.ErrClosingSocket
|
||||
}
|
||||
|
||||
func (w *wifinina) SetSockOpt(sockfd int, level int, opt int, value interface{}) error {
|
||||
@@ -981,7 +973,7 @@ func (w *wifinina) SetSockOpt(sockfd int, level int, opt int, value interface{})
|
||||
fmt.Printf("[SetSockOpt] sockfd: %d\r\n", sockfd)
|
||||
}
|
||||
|
||||
return drivers.ErrNotSupported
|
||||
return netdev.ErrNotSupported
|
||||
}
|
||||
|
||||
func (w *wifinina) startClient(sock sock, hostname string, addr uint32, port uint16, mode uint8) {
|
||||
|
||||
Reference in New Issue
Block a user