1
- import pixie, json, times, locks
1
+ import pixie, json, times, locks, options, sequtils
2
2
3
3
import frameos/ types
4
4
import frameos/ utils/ image
@@ -12,6 +12,7 @@ type Driver* = ref object of FrameOSDriver
12
12
height: int
13
13
lastImageData: seq [ColorRGBX ]
14
14
lastRenderAt: float
15
+ palette: Option [seq [(int , int , int )]]
15
16
16
17
var
17
18
lastFloatImageLock: Lock
@@ -53,7 +54,23 @@ proc init*(frameOS: FrameOS): Driver =
53
54
logger: logger,
54
55
width: width,
55
56
height: height,
57
+ palette: none (seq [(int , int , int )]),
56
58
)
59
+
60
+ if waveshareDriver.colorOption == ColorOption .SpectraSixColor and len (frameOS.frameConfig.palette.colors) == 6 :
61
+ let c = frameOS.frameConfig.palette.colors
62
+ result .palette = some (@ [
63
+ (c[0 ][0 ], c[0 ][1 ], c[0 ][2 ]),
64
+ (c[1 ][0 ], c[1 ][1 ], c[1 ][2 ]),
65
+ (c[2 ][0 ], c[2 ][1 ], c[2 ][2 ]),
66
+ (c[3 ][0 ], c[3 ][1 ], c[3 ][2 ]),
67
+ (999 , 999 , 999 ),
68
+ (c[4 ][0 ], c[4 ][1 ], c[4 ][2 ]),
69
+ (c[5 ][0 ], c[5 ][1 ], c[5 ][2 ]),
70
+ ])
71
+ else :
72
+ result .palette = some (spectra6ColorPalette)
73
+
57
74
except Exception as e:
58
75
logger.log (%* {" event" : " driver:waveshare" ,
59
76
" error" : " Failed to initialize driver" , " exception" : e.msg,
@@ -136,7 +153,7 @@ proc renderSevenColor*(self: Driver, image: Image) =
136
153
waveshareDriver.renderImage (pixels)
137
154
138
155
proc renderSpectraSixColor * (self: Driver , image: Image ) =
139
- let pixels = ditherPaletteIndexed (image, spectra6ColorPalette)
156
+ let pixels = ditherPaletteIndexed (image, if self.palette. isSome (): self.palette. get () else : spectra6ColorPalette)
140
157
setLastPixels (pixels)
141
158
self.notifyImageAvailable ()
142
159
waveshareDriver.renderImage (pixels)
0 commit comments