diff --git a/Makefile b/Makefile index cdf773d..5bb9c12 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,17 @@ +.PHONY: setup run build install + setup: cd go-rpi-rgb-led-matrix/lib/rpi-rgb-led-matrix && make -run: +rundev: sudo go run cmd/rpi/main.go --led-slowdown-gpio=2 --led-pwm-dither-bits=1 build: - go build cmd/rpi/main.go + go build -o blockyclock cmd/rpi/main.go + +install: + $(MAKE) setup && \ + $(MAKE) build && \ + sudo mv blockyclock /usr/bin && \ + sudo cp blockyclock.service /lib/systemd/system/ && \ + sudo systemctl enable --now blockyclock.service diff --git a/cmd/rpi/main.go b/cmd/rpi/main.go index ef1281f..346ed27 100644 --- a/cmd/rpi/main.go +++ b/cmd/rpi/main.go @@ -16,7 +16,7 @@ import ( ) const ( - RefreshRateHz = 1 + RefreshRateHz = 120 MempoolURL = "mempool.space" ) @@ -29,10 +29,10 @@ func main() { c := rgbmatrix.NewCanvas(m) d := display.New(c, - display.NewSlot(9, 5, 4, 0, 0), - display.NewSlot(5, 5, 4, 44, 0), - display.NewSlot(7, 13, 8, 5, 9), - display.NewSlot(12, 5, 4, 7, 27), + display.NewSlot(display.Left, 9, 5, 4, 0, 0), + display.NewSlot(display.Right, 5, 5, 4, 44, 0), + display.NewSlot(display.Center, 8, 13, 8, 0, 9), + display.NewSlot(display.Center, 16, 5, 4, 0, 27), ) ctx, cancel := context.WithCancel(context.Background()) @@ -85,7 +85,6 @@ func main() { for { select { case m := <-msgs: - fmt.Printf("%+v\n", m) if m.Fees != nil { feesMutex.Lock() fees = *m.Fees diff --git a/display/slot.go b/display/slot.go index 48742fb..ebb32b0 100644 --- a/display/slot.go +++ b/display/slot.go @@ -9,6 +9,14 @@ import ( rgbmatrix "git.dvdt.dev/david/bitcoin-ticker-pi/go-rpi-rgb-led-matrix" ) +type Alignment uint8 + +const ( + Left Alignment = iota + Center + Right +) + var ( ErrUnsupportedSlotHeight = errors.New("unsupported slot height") ) @@ -33,15 +41,17 @@ func drawRow(canvas *rgbmatrix.Canvas, row []color.RGBA, x, y int) { } type Slot struct { + alignment Alignment segmentLimit int segmentHeight int segmentWidth int - x, y int + x, xoffset, y int text []Segment } -func NewSlot(limit, height, width, x, y int) *Slot { +func NewSlot(alignment Alignment, limit, height, width, x, y int) *Slot { return &Slot{ + alignment: alignment, segmentLimit: limit, segmentHeight: height, segmentWidth: width, @@ -61,6 +71,20 @@ func (s *Slot) Update(text []Segment) error { }...) } + // Default to left alignment. + s.xoffset = 0 + if s.alignment == Center { + s.xoffset = ((s.segmentLimit * s.segmentWidth) - (len(text) * s.segmentWidth)) / 2 + } + if s.alignment == Right { + s.xoffset = (s.segmentLimit * s.segmentWidth) - (len(text) * s.segmentWidth) + } + + fmt.Printf("segmentLimit: %d\n", s.segmentLimit) + fmt.Printf("segmentWidth: %d\n", s.segmentWidth) + fmt.Printf("len(text): %d\n", len(text)) + fmt.Printf("xoffset value: %d\n", s.xoffset) + var font fonts.Font switch s.segmentHeight { case 5: @@ -88,6 +112,6 @@ func (s *Slot) Update(text []Segment) error { func (s *Slot) Draw(canvas *rgbmatrix.Canvas) { for i, segment := range s.text { - segment.Draw(canvas, s.x+(i*s.segmentWidth), s.y) + segment.Draw(canvas, s.x+(i*s.segmentWidth)+s.xoffset, s.y) } } diff --git a/fonts/13x8.go b/fonts/13x8.go index d66945f..c96bb45 100644 --- a/fonts/13x8.go +++ b/fonts/13x8.go @@ -21,7 +21,7 @@ var ( {0, 1, 1, 1, 1, 1, 0, 0}, {1, 1, 1, 0, 1, 1, 1, 0}, {1, 1, 0, 0, 0, 1, 1, 0}, - {0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 1, 1, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0}, @@ -68,11 +68,11 @@ var ( {1, 1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0, 0}, - {1, 1, 0, 0, 0, 0, 0, 0}, - {1, 1, 1, 1, 1, 1, 0, 0}, {1, 1, 1, 1, 1, 1, 0, 0}, + {1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 1, 1, 0}, + {0, 0, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 1, 0, 0}, {1, 1, 1, 1, 1, 0, 0, 0}, diff --git a/fonts/5x4.go b/fonts/5x4.go index 5f12fd9..e9e6a20 100644 --- a/fonts/5x4.go +++ b/fonts/5x4.go @@ -63,7 +63,7 @@ var ( {1, 0, 1, 0}, {1, 1, 1, 0}, {0, 0, 1, 0}, - {0, 1, 1, 0}, + {1, 1, 0, 0}, }, "0": { {0, 1, 0, 0}, @@ -73,10 +73,10 @@ var ( {0, 1, 0, 0}, }, "satoshi": { + {0, 0, 1, 0}, {0, 1, 0, 0}, - {1, 1, 1, 0}, - {1, 1, 1, 0}, - {1, 1, 1, 0}, + {1, 1, 1, 1}, + {0, 0, 1, 0}, {0, 1, 0, 0}, }, "dollar": {