|
@@ -0,0 +1,65 @@
|
|
|
+#!/bin/sh
|
|
|
+# Dependency, shell, printf, dd
|
|
|
+
|
|
|
+# TODO: Dependency on dd can be removed, but will be really slow
|
|
|
+# TODO: Implement double buffering
|
|
|
+# TODO: Propose no dependency on printf
|
|
|
+NO_DD=0
|
|
|
+USE_DOUBLE_BUFFERING=0
|
|
|
+NO_PRINTF=0
|
|
|
+
|
|
|
+# NEED TO FILL THIS INFORMATION
|
|
|
+# geometry 220 176 220 352 16
|
|
|
+# rgba 5/11,6/5,5/0,0/0
|
|
|
+# TODO: Adding a dependency on fbset we may be able to autoset this:
|
|
|
+SCREEN_WIDTH=220
|
|
|
+SCREEN_HEIGHT=176
|
|
|
+RED_DEPTH=5
|
|
|
+GREEN_DEPTH=6
|
|
|
+BLUE_DEPTH=5
|
|
|
+RED_POS=11
|
|
|
+GREEN_POS=5
|
|
|
+BLUE_POS=0
|
|
|
+TEMP=`mktemp`
|
|
|
+SCREEN_FB=/dev/fb0
|
|
|
+###
|
|
|
+
|
|
|
+# AUTOCALCULATED VALUES
|
|
|
+BIT_PER_PIXEL=$((${RED_DEPTH}+${GREEN_DEPTH}+${BLUE_DEPTH}))
|
|
|
+BYTE_PER_PIXEL=$((${BIT_PER_PIXEL}/8))
|
|
|
+SCREEN_STRIDE=$((${BYTE_PER_PIXEL}*${SCREEN_WIDTH}))
|
|
|
+RED_MAX=$((2**${RED_DEPTH}))
|
|
|
+GREEN_MAX=$((2**${GREEN_DEPTH}))
|
|
|
+BLUE_MAX=$((2**${BLUE_DEPTH}))
|
|
|
+RED_SHIFT=$((2**${RED_POS}))
|
|
|
+GREEN_SHIFT=$((2**${GREEN_POS}))
|
|
|
+BLUE_SHIFT=$((2**${BLUE_POS}))
|
|
|
+
|
|
|
+drawpixel()
|
|
|
+{
|
|
|
+ x=$1; shift 1
|
|
|
+ y=$1; shift 1
|
|
|
+ r=$1; shift 1
|
|
|
+ g=$1; shift 1
|
|
|
+ b=$1; shift 1
|
|
|
+
|
|
|
+ skip=$(($((${x}*${BYTE_PER_PIXEL}-1))+$((${y}*${SCREEN_STRIDE}))))
|
|
|
+
|
|
|
+ rc=$((${r}*${RED_MAX}/256))
|
|
|
+ gc=$((${g}*${GREEN_MAX}/256))
|
|
|
+ bc=$((${b}*${BLUE_MAX}/256))
|
|
|
+
|
|
|
+ rs=$((${rc}*${RED_SHIFT}))
|
|
|
+ gs=$((${gc}*${GREEN_SHIFT}))
|
|
|
+ bs=$((${bc}*${BLUE_SHIFT}))
|
|
|
+
|
|
|
+ value=$((${rs}+${gs}+${bs}))
|
|
|
+
|
|
|
+ echo -ne "" > ${TEMP}
|
|
|
+ for i in `seq $((${BIT_PER_PIXEL}-8)) -8 0`; do
|
|
|
+ val=$(($((${value}/$((2**$i))))&255))
|
|
|
+ echo -ne "$(printf '\\x%x' ${val})" >> ${TEMP}
|
|
|
+ done
|
|
|
+
|
|
|
+ dd if=${TEMP} of=${SCREEN_FB} bs=1 seek=${skip} count=${BYTE_PER_PIXEL} 2&> /dev/null
|
|
|
+}
|