Browse Source

Create bashfblib.sh

Add main library file
Godzil 8 years ago
parent
commit
ca4f990ec8
1 changed files with 65 additions and 0 deletions
  1. 65 0
      bashfblib.sh

+ 65 - 0
bashfblib.sh

@@ -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
+}