Skip to content

Instantly share code, notes, and snippets.

@russdill
Created April 21, 2012 00:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save russdill/2432903 to your computer and use it in GitHub Desktop.
Save russdill/2432903 to your computer and use it in GitHub Desktop.
#!/bin/sh
CLOCK=162
LATCH=161
DATA=145
PIN_MUX=uart2_rts
PIN_MUX_VAL=4
gpio_init()
{
[ -e /sys/kernel/debug/omap_mux ] || mount -t debugfs none /sys/kernel/debug
echo ${PIN_MUX_VAL} > /sys/kernel/debug/omap_mux/${PIN_MUX}
echo ${CLOCK} > /sys/class/gpio/export
echo ${LATCH} > /sys/class/gpio/export
echo ${DATA} > /sys/class/gpio/export
echo low > /sys/class/gpio/gpio${CLOCK}/direction
echo low > /sys/class/gpio/gpio${LATCH}/direction
echo low > /sys/class/gpio/gpio${DATA}/direction
}
raw()
{
local data="$1"
local i
for i in $(seq 0 7); do
echo $(( (~$data >> (7 - $i)) & 1 )) > /sys/class/gpio/gpio${DATA}/value
echo 1 > /sys/class/gpio/gpio${CLOCK}/value
echo 0 > /sys/class/gpio/gpio${CLOCK}/value
done
echo 1 > /sys/class/gpio/gpio${LATCH}/value
echo 0 > /sys/class/gpio/gpio${LATCH}/value
}
set_segs()
{
local segs="$1"
local data=0
local i
A=1
B=2
C=4
D=8
E=16
F=32
G=64
P=128
for i in $(seq 0 $(( ${#segs} - 1 )) ); do
n=$(eval echo \$${segs:$i:1})
data=$(( $data + $n ))
done
raw $data
}
lookup()
{
local v=$(echo -n $1)
[ -z "$v" ] && return
cat << "__EOF__" | grep -F -e "$v " | cut -f 2 -d ' '
0 ABCDEF
1 BC
2 ABGED
3 ABGCD
4 FBGC
5 AFGCD
6 AFGECD
7 FABC
8 ABCDEFG
9 ABCDFG
A ABCEFG
B CDEFG
C ADEF
D BCDEG
E ADEFG
F AEFG
G ACDEF
H BCEFG
I BC
J BCDE
K ACEFG
L DEF
M ACEG
N CEG
O CDEG
P ABEFG
Q ABCFG
R EG
S AFGCD
T DEFG
U BCDEF
V CDE
W BDFG
X ADG
Y BCDFG
Z BEG
- G
| BC
' B
` F
^ ABF
[ ADEF
] ABCD
= GD
_ D
/ BE
\ CF
+ EFG
! BP
? ABP
__EOF__
}
data="$1"
if [ -z "$data" ]; then
echo No data byte
return 1
fi
gpio_init
if [ "${data:0:2}" == "0x" ]; then
raw $data
elif [ "${data:0:1}" == "/" ]; then
for i in "$@"; do
set_segs ${i:1}
usleep 250000
done
else
data=$(echo "$data" | tr [a-z] [A-Z])
while [ -n "${data}" ]; do
if [ "${data:0:1}" = "." ]; then
set_segs P
elif [ "${data:1:1}" = "." ]; then
set_segs "$(lookup ${data:0:1})P"
data="${data:1}"
else
set_segs $(lookup ${data:0:1})
fi
data="${data:1}"
[ -n "${data}" ] && usleep 250000
done
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment