diff --git a/client.go b/client.go index 3f7dd50..74c8d42 100644 --- a/client.go +++ b/client.go @@ -10,6 +10,7 @@ import ( "sync" "time" + "github.com/sago35/tinydisplay/defines" "tinygo.org/x/drivers/touch" ) @@ -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) @@ -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) @@ -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 { @@ -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 } diff --git a/cmd/tinydisplay/main.go b/cmd/tinydisplay/main.go index 7245ecc..fb966a3 100644 --- a/cmd/tinydisplay/main.go +++ b/cmd/tinydisplay/main.go @@ -8,7 +8,7 @@ import ( "net/http" "net/rpc" - "github.com/sago35/tinydisplay" + "github.com/sago35/tinydisplay/server" ) func main() { @@ -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)) diff --git a/defines.go b/defines.go new file mode 100644 index 0000000..1311d74 --- /dev/null +++ b/defines.go @@ -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)) +} diff --git a/defines/defines.go b/defines/defines.go new file mode 100644 index 0000000..fd5b1de --- /dev/null +++ b/defines/defines.go @@ -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 { +} diff --git a/display.go b/server/display.go similarity index 99% rename from display.go rename to server/display.go index 1a80cea..f3e7edf 100644 --- a/display.go +++ b/server/display.go @@ -1,4 +1,4 @@ -package tinydisplay +package server import ( "image" diff --git a/server.go b/server/server.go similarity index 51% rename from server.go rename to server/server.go index 11df1e1..437d6d6 100644 --- a/server.go +++ b/server/server.go @@ -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" ) @@ -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)) @@ -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) @@ -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() @@ -124,6 +93,3 @@ func (s *Server) ReadTouchPoint(args *NotImpl, ret *touch.Point) error { return nil } - -type NotImpl struct { -}