From ca4f990ec855ba3d5a148e2d30521037b15d8d95 Mon Sep 17 00:00:00 2001 From: Godzil Date: Thu, 17 Dec 2015 11:29:52 +0000 Subject: [PATCH] Create bashfblib.sh Add main library file --- bashfblib.sh | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 bashfblib.sh diff --git a/bashfblib.sh b/bashfblib.sh new file mode 100644 index 0000000..730aa31 --- /dev/null +++ b/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 +}