1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/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
- }
- fblib_cleanup()
- {
- rm ${TEMP}
- }
- }
|