Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ssd1306: Add function SetFlip and GetFlip #702

Merged
merged 2 commits into from
Aug 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions ssd1306/registers.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ssd1306

import "tinygo.org/x/drivers"

// Registers
const (
Address = 0x3D
Expand Down Expand Up @@ -38,4 +40,7 @@ const (

EXTERNALVCC VccMode = 0x1
SWITCHCAPVCC VccMode = 0x2

NO_ROTATION = drivers.Rotation0
ROTATION_180 = drivers.Rotation180
)
29 changes: 21 additions & 8 deletions ssd1306/ssd1306.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@ import (
)

var (
errBufferSize = errors.New("invalid size buffer")
errOutOfRange = errors.New("out of screen range")
errNotImplemented = errors.New("not implemented")
errBufferSize = errors.New("invalid size buffer")
errOutOfRange = errors.New("out of screen range")
)

type ResetValue [2]byte
Expand All @@ -33,6 +32,7 @@ type Device struct {
canReset bool
resetCol ResetValue
resetPage ResetValue
rotation drivers.Rotation
}

// Config is the configuration for the display
Expand All @@ -48,6 +48,7 @@ type Config struct {
// If you're using a different size, you might need to set these values manually.
ResetCol ResetValue
ResetPage ResetValue
Rotation drivers.Rotation
}

type I2CBus struct {
Expand Down Expand Up @@ -149,8 +150,8 @@ func (d *Device) Configure(cfg Config) {
}
d.Command(MEMORYMODE)
d.Command(0x00)
d.Command(SEGREMAP | 0x1)
d.Command(COMSCANDEC)

d.SetRotation(cfg.Rotation)

if (d.width == 128 && d.height == 64) || (d.width == 64 && d.height == 48) { // 128x64 or 64x48
d.Command(SETCOMPINS)
Expand Down Expand Up @@ -363,13 +364,25 @@ func (d *Device) DrawBitmap(x, y int16, bitmap pixel.Image[pixel.Monochrome]) er

// Rotation returns the currently configured rotation.
func (d *Device) Rotation() drivers.Rotation {
return drivers.Rotation0
return d.rotation
}

// SetRotation changes the rotation of the device (clock-wise).
// Would have to be implemented in software for this device.
func (d *Device) SetRotation(rotation drivers.Rotation) error {
return errNotImplemented
d.rotation = rotation
switch d.rotation {
case drivers.Rotation0:
d.Command(SEGREMAP | 0x1) // Reverse horizontal mapping
d.Command(COMSCANDEC) // Reverse vertical mapping
case drivers.Rotation180:
d.Command(SEGREMAP) // Normal horizontal mapping
d.Command(COMSCANINC) // Normal vertical mapping
// nothing to do
default:
d.Command(SEGREMAP | 0x1) // Reverse horizontal mapping
d.Command(COMSCANDEC) // Reverse vertical mapping
}
return nil
}

// Set the sleep mode for this display. When sleeping, the panel uses a lot
Expand Down
Loading