Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/soypat/ether-swtch

Low level Ethernet stack marshaller/unmarshaller for use in tiny places.
https://github.com/soypat/ether-swtch

Last synced: about 2 months ago
JSON representation

Low level Ethernet stack marshaller/unmarshaller for use in tiny places.

Awesome Lists containing this project

README

        

# Archived
No longer maintained.

See seqs for a proper TCP/IP stack implementation: https://github.com/soypat/seqs

# ether-swtch
Low level Ethernet/IP/TCP/HTTP stack marshaller/unmarshaller for use in tiny places.

Below is an example of an HTTP server for the ENC28J60 integrated circuit using TinyGo. Works on the Arduino Mega 2560. Use build tag `-tags=noheap` to reduce heap allocations.
```go
package main

import (
"net"

swtch "github.com/soypat/ether-swtch"
"github.com/soypat/ether-swtch/hex"
)

func main() {
var (
// SPI Chip select pin. Can be any Digital pin.
spiCS = machine.D53
MAC = net.HardwareAddr{0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xFF}
MyIP = net.IP{192, 168, 1, 5} //static setup is the only one available
)

// Configure writer/reader integrated circuit.
dev := enc28j60.New(spiCS, machine.SPI0)

err := dev.Init(MAC)
if err != nil {
println(err.Error())
}
const okHeader = "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"
timeout := time.Second * 1
// Spin up HTTP server which responds with "Hello world!"
swtch.HTTPListenAndServe(dev, MAC, MyIP, timeout, func(URL []byte) (response []byte) {
return []byte(okHeader + "Hello world!")
}, printNonNilErr)
}

func printNonNilErr(err error) {
if err != nil {
println(err.Error())
}
}
```

With `noheap` build tag enabled the above program consumes the following memory
```
code data bss | flash ram
22278 765 856 | 23043 1621
```
The program should be small enough to run on the Arduino UNO as well (2k sram, 32k flash).