Skip to content

Commit

Permalink
Change client side to CGO-less (#4)
Browse files Browse the repository at this point in the history
  • Loading branch information
sago35 authored Sep 16, 2022
1 parent e219b11 commit e78a6e2
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 57 deletions.
15 changes: 8 additions & 7 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"sync"
"time"

"github.com/sago35/tinydisplay/defines"
"tinygo.org/x/drivers/touch"
)

Expand Down Expand Up @@ -51,8 +52,8 @@ func (c *Client) Tick() {
}

func (c *Client) Size() (x, y int16) {
args := NotImpl{}
ret := SizeRetval{}
args := defines.NotImpl{}
ret := defines.SizeRetval{}
err := c.Client.Call("Server.Size", args, &ret)
if err != nil {
panic(err)
Expand Down Expand Up @@ -136,8 +137,8 @@ func (c *Client) SetImage(img draw.Image) {
}

func (c *Client) update() error {
args := UpdateArgs{Image: c.Image}
ret := NotImpl{}
args := defines.UpdateArgs{Image: c.Image}
ret := defines.NotImpl{}
err := c.Client.Call("Server.Update", args, &ret)
if err != nil {
panic(err)
Expand All @@ -152,8 +153,8 @@ func (c *Client) Set(x, y int, clr color.Color) {
}

func (c *Client) GetPressedKey() uint16 {
args := NotImpl{}
ret := GetPressedKeysRetval{}
args := defines.NotImpl{}
ret := defines.GetPressedKeysRetval{}
c.Client.Call("Server.GetPressedKeys", args, &ret)

for _, key := range ret.Keys {
Expand All @@ -167,6 +168,6 @@ func (c *Client) GetPressedKey() uint16 {

func (c *Client) ReadTouchPoint() touch.Point {
var ret touch.Point
c.Client.Call("Server.ReadTouchPoint", NotImpl{}, &ret)
c.Client.Call("Server.ReadTouchPoint", defines.NotImpl{}, &ret)
return ret
}
4 changes: 2 additions & 2 deletions cmd/tinydisplay/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
"net/http"
"net/rpc"

"github.com/sago35/tinydisplay"
"github.com/sago35/tinydisplay/server"
)

func main() {
Expand All @@ -35,7 +35,7 @@ func main() {
}

func run(addr string, port, w, h int) error {
server := tinydisplay.NewServer(w, h)
server := server.NewServer(w, h)
rpc.Register(server)
rpc.HandleHTTP()
l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", addr, port))
Expand Down
22 changes: 22 additions & 0 deletions defines.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package tinydisplay

import (
"image/color"
)

func RGB565ToRGBA(c uint16) color.RGBA {
return color.RGBA{
R: uint8((c & 0xF800) >> 8),
G: uint8((c & 0x07E0) >> 3),
B: uint8((c & 0x001F) << 3),
A: 0xFF,
}
}

// RGBATo565 converts a color.RGBA to uint16 used in the display
func RGBATo565(c color.RGBA) uint16 {
r, g, b, _ := c.RGBA()
return uint16((r & 0xF800) +
((g & 0xFC00) >> 5) +
((b & 0xF800) >> 11))
}
42 changes: 42 additions & 0 deletions defines/defines.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package defines

import (
"image/color"
"image/draw"

"fyne.io/fyne/v2"
)

type SizeRetval struct {
X, Y int16
}

type SetPixelArgs struct {
X, Y int16
C color.RGBA
}

type FillScreenArgs struct {
C color.RGBA
}

type FillRectangleArgs struct {
X, Y, Width, Height int16
C color.RGBA
}

type DrawRGBBitmap8Args struct {
X, Y, W, H int16
Data []uint8
}

type UpdateArgs struct {
Image draw.Image
}

type GetPressedKeysRetval struct {
Keys []fyne.KeyName
}

type NotImpl struct {
}
2 changes: 1 addition & 1 deletion display.go → server/display.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tinydisplay
package server

import (
"image"
Expand Down
60 changes: 13 additions & 47 deletions server.go → server/server.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package tinydisplay
package server

import (
"image/color"
"image/draw"
"sort"
"strings"

"fyne.io/fyne/v2"
"github.com/sago35/tinydisplay"
"github.com/sago35/tinydisplay/defines"
"tinygo.org/x/drivers/touch"
)

Expand All @@ -24,66 +24,39 @@ func NewServer(w, h int) *Server {
return s
}

type SizeRetval struct {
X, Y int16
}

func (s *Server) Size(args *NotImpl, ret *SizeRetval) error {
func (s *Server) Size(args *defines.NotImpl, ret *defines.SizeRetval) error {
ret.X, ret.Y = s.Device.Size()
return nil
}

type SetPixelArgs struct {
X, Y int16
C color.RGBA
}

func (s *Server) SetPixel(args *SetPixelArgs, ret *NotImpl) error {
func (s *Server) SetPixel(args *defines.SetPixelArgs, ret *defines.NotImpl) error {
s.Device.SetPixel(args.X, args.Y, args.C)
return nil
}

func (s *Server) Display(args, ret *NotImpl) error {
func (s *Server) Display(args, ret *defines.NotImpl) error {
return s.Device.Display()
}

type FillScreenArgs struct {
C color.RGBA
}

func (s *Server) FillScreen(args *FillScreenArgs, ret *NotImpl) error {
func (s *Server) FillScreen(args *defines.FillScreenArgs, ret *defines.NotImpl) error {
s.Device.FillScreen(args.C)
return nil
}

type FillRectangleArgs struct {
X, Y, Width, Height int16
C color.RGBA
}

func (s *Server) FillRectangle(args *FillRectangleArgs, ret *NotImpl) error {
func (s *Server) FillRectangle(args *defines.FillRectangleArgs, ret *defines.NotImpl) error {
return s.Device.FillRectangle(args.X, args.Y, args.Width, args.Height, args.C)
}

type DrawRGBBitmap8Args struct {
X, Y, W, H int16
Data []uint8
}

func (s *Server) DrawRGBBitmap8(args *DrawRGBBitmap8Args, ret *NotImpl) error {
func (s *Server) DrawRGBBitmap8(args *defines.DrawRGBBitmap8Args, ret *defines.NotImpl) error {
return s.Device.DrawRGBBitmap8(args.X, args.Y, args.Data, args.W, args.H)
}

func (s *Server) ShowAndRun(args, ret *NotImpl) error {
func (s *Server) ShowAndRun(args, ret *defines.NotImpl) error {
s.Device.ShowAndRun()
return nil
}

type UpdateArgs struct {
Image draw.Image
}

func (s *Server) Update(args *UpdateArgs, ret *NotImpl) error {
func (s *Server) Update(args *tinydisplay.UpdateArgs, ret *defines.NotImpl) error {
for y := 0; y < args.Image.Bounds().Dy(); y++ {
for x := 0; x < args.Image.Bounds().Dx(); x++ {
s.Device.image.Set(x, y, args.Image.At(x, y))
Expand All @@ -93,11 +66,7 @@ func (s *Server) Update(args *UpdateArgs, ret *NotImpl) error {
return nil
}

type GetPressedKeysRetval struct {
Keys []fyne.KeyName
}

func (s *Server) GetPressedKeys(args *NotImpl, ret *GetPressedKeysRetval) error {
func (s *Server) GetPressedKeys(args *defines.NotImpl, ret *defines.GetPressedKeysRetval) error {
s.Device.mu.Lock()
for key := range s.Device.KeysPressed {
ret.Keys = append(ret.Keys, key)
Expand All @@ -109,7 +78,7 @@ func (s *Server) GetPressedKeys(args *NotImpl, ret *GetPressedKeysRetval) error
return nil
}

func (s *Server) ReadTouchPoint(args *NotImpl, ret *touch.Point) error {
func (s *Server) ReadTouchPoint(args *defines.NotImpl, ret *touch.Point) error {

s.Device.mu.Lock()

Expand All @@ -124,6 +93,3 @@ func (s *Server) ReadTouchPoint(args *NotImpl, ret *touch.Point) error {

return nil
}

type NotImpl struct {
}

0 comments on commit e78a6e2

Please sign in to comment.