diff --git a/wifinina/wifinina.go b/wifinina/wifinina.go index a984ff3..81ca223 100644 --- a/wifinina/wifinina.go +++ b/wifinina/wifinina.go @@ -17,7 +17,7 @@ import ( "tinygo.org/x/drivers/net" ) -const _debug = false +const _debug = true const ( MaxSockets = 4 @@ -319,6 +319,8 @@ func (d *Device) StartClient(addr uint32, port uint16, sock uint8, mode uint8) e l += d.sendParam8(mode, true) d.addPadding(l) d.spiChipDeselect() + + println("wait for rsp cmd") _, err := d.waitRspCmd1(CmdStartClientTCP) return err } @@ -579,7 +581,24 @@ func (d *Device) SetPassphrase(ssid string, passphrase string) error { } func (d *Device) SetKey(ssid string, index uint8, key string) error { - return ErrNotImplemented + defer d.spiChipDeselect() + if err := d.waitForChipSelect(); err != nil { + return err + } + + d.sendCmd(CmdSetKey, 3) + d.sendParamStr(ssid, false) + d.sendParam8(index, false) + d.sendParamStr(key, true) + + d.padTo4(8 + len(ssid) + len(key)) + + _, err := d.waitRspCmd1(CmdSetKey) + if err != nil { + return err + } + + return nil } func (d *Device) SetNetworkForAP(ssid string) error { @@ -597,11 +616,41 @@ func (d *Device) SetIP(which uint8, ip uint32, gw uint32, subnet uint32) error { } func (d *Device) SetDNS(which uint8, dns1 uint32, dns2 uint32) error { - return ErrNotImplemented + defer d.spiChipDeselect() + if err := d.waitForChipSelect(); err != nil { + return err + } + + d.sendCmd(CmdSetDNSConfig, 3) + d.sendParam8(which, false) + d.sendParam32(dns1, false) + d.sendParam32(dns2, true) + + _, err := d.waitRspCmd1(CmdSetDNSConfig) + if err != nil { + return err + } + + return nil } func (d *Device) SetHostname(hostname string) error { - return ErrNotImplemented + defer d.spiChipDeselect() + if err := d.waitForChipSelect(); err != nil { + return err + } + + d.sendCmd(CmdSetHostname, 3) + d.sendParamStr(hostname, true) + + d.padTo4(5 + len(hostname)) + + _, err := d.waitRspCmd1(CmdSetHostname) + if err != nil { + return err + } + + return nil } func (d *Device) SetPowerMode(mode uint8) error { @@ -768,7 +817,7 @@ func (d *Device) sendCmdStr(cmd uint8, p1 string) (err error) { return err } l := d.sendCmd(cmd, 1) - l += d.sendParamStr(p1, false) + l += d.sendParamStr(p1, true) d.addPadding(l) return nil } @@ -778,10 +827,10 @@ func (d *Device) sendCmdStr2(cmd uint8, p1 string, p2 string) (err error) { if err := d.waitForChipSelect(); err != nil { return err } - l := d.sendCmd(cmd, 2) - l += d.sendParamStr(p1, false) - l += d.sendParamStr(p2, true) - d.addPadding(l) + d.sendCmd(cmd, 2) + d.sendParamStr(p1, false) + d.sendParamStr(p2, true) + d.padTo4(6 + len(p1) + len(p2)) return nil } @@ -1092,3 +1141,14 @@ func (d *Device) addPadding(l int) { d.SPI.Transfer(dummyData) } } + +func (d *Device) padTo4(l int) { + if _debug { + println("addPadding", l, "\r") + } + + for l%4 != 0 { + d.SPI.Transfer(dummyData) + l++ + } +}