mirror of
https://gitlab.com/c3d/db48x.git
synced 2024-09-29 05:36:58 +02:00
dm32: Add DB48-specific keymap
Add a DM48 keymap that restores correct keybindings in the file selector dialog. Fixes: #1002 Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
This commit is contained in:
parent
3385ea4b3b
commit
709436d095
8 changed files with 315 additions and 2 deletions
5
Makefile
5
Makefile
|
@ -69,7 +69,7 @@ color-%:
|
|||
|
||||
# installation steps
|
||||
COPY=cp
|
||||
install: install-pgm install-qspi install-help install-demo install-config
|
||||
install: install-pgm install-qspi install-keymap install-help install-demo install-config
|
||||
$(EJECT)
|
||||
@echo "# Installed $(VERSION)"
|
||||
install-fast: install-pgm
|
||||
|
@ -78,6 +78,8 @@ install-pgm: all
|
|||
$(COPY) $(TARGET).$(PGM) $(MOUNTPOINT)
|
||||
install-qspi: all
|
||||
$(COPY) $(QSPI) $(MOUNTPOINT)
|
||||
install-keymap: keymap.bin
|
||||
$(COPY) $< $(MOUNTPOINT)
|
||||
install-help: help/$(TARGET).md
|
||||
mkdir -p $(MOUNTPOINT)help/ $(MOUNTPOINT)help/img
|
||||
$(COPY) help/$(TARGET).md help/*.bmp $(MOUNTPOINT)help/
|
||||
|
@ -156,6 +158,7 @@ dist: all
|
|||
$(TAR_OPTS) \
|
||||
$(TARGET).$(PGM) \
|
||||
$(TARGET)_qspi.bin \
|
||||
keymap.bin \
|
||||
help/$(TARGET).md \
|
||||
help/*.bmp help/*/*.bmp \
|
||||
state/*.48[sSbB] \
|
||||
|
|
BIN
keymap.bin
Normal file
BIN
keymap.bin
Normal file
Binary file not shown.
197
keymap_utils/bin/keymap2layout
Executable file
197
keymap_utils/bin/keymap2layout
Executable file
|
@ -0,0 +1,197 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import os,sys,re
|
||||
|
||||
sysmap = [
|
||||
33, 34, 35, 36, 37,
|
||||
28, 29, 30, 31, 32,
|
||||
23, 24, 25, 26, 27,
|
||||
18, 19, 20, 21, 22,
|
||||
13, 14, 15, 16, 17,
|
||||
8, 9, 10, 11, 12,
|
||||
2, 3, 4, 5, 6,
|
||||
39, 40, 41, 42, 43,
|
||||
44, 13, 7, 1, 38 ]
|
||||
|
||||
key_ix_map = [
|
||||
44, 35, 36, 37, 38, 39, 43, 30, 31, 32, 33, 34, 42, 25, 26, 27, 28, 29, 20, 21, 22, 23, 24, 15, 16, 17, 18, 19, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4
|
||||
]
|
||||
|
||||
key_defs = ["None",
|
||||
"KEY_SIGMA",
|
||||
"KEY_INV",
|
||||
"KEY_SQRT",
|
||||
"KEY_LOG",
|
||||
"KEY_LN",
|
||||
"KEY_XEQ",
|
||||
"KEY_STO",
|
||||
"KEY_RCL",
|
||||
"KEY_RDN",
|
||||
"KEY_SIN",
|
||||
"KEY_COS",
|
||||
"KEY_TAN",
|
||||
"KEY_ENTER",
|
||||
"KEY_SWAP",
|
||||
"KEY_CHS",
|
||||
"KEY_E",
|
||||
"KEY_BSP",
|
||||
"KEY_UP",
|
||||
"KEY_7",
|
||||
"KEY_8",
|
||||
"KEY_9",
|
||||
"KEY_DIV",
|
||||
"KEY_DOWN",
|
||||
"KEY_4",
|
||||
"KEY_5",
|
||||
"KEY_6",
|
||||
"KEY_MUL",
|
||||
"KEY_SHIFT",
|
||||
"KEY_1",
|
||||
"KEY_2",
|
||||
"KEY_3",
|
||||
"KEY_SUB",
|
||||
"KEY_EXIT",
|
||||
"KEY_0",
|
||||
"KEY_DOT",
|
||||
"KEY_RUN",
|
||||
"KEY_ADD"
|
||||
]
|
||||
|
||||
|
||||
key_lbls = ["None",
|
||||
"Sum+",
|
||||
"1/x",
|
||||
"SQRT",
|
||||
"LOG",
|
||||
"LN",
|
||||
"XEQ",
|
||||
"STO",
|
||||
"RCL",
|
||||
"RDN",
|
||||
"SIN",
|
||||
"COS",
|
||||
"TAN",
|
||||
"ENTER",
|
||||
"x<>y",
|
||||
"CHS",
|
||||
"E",
|
||||
"<--",
|
||||
"UP",
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"DIV",
|
||||
"DOWN",
|
||||
"4",
|
||||
"5",
|
||||
"6",
|
||||
"MUL",
|
||||
"SHIFT",
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"SUB",
|
||||
"EXIT",
|
||||
"0",
|
||||
"DOT",
|
||||
"RUN",
|
||||
"ADD",
|
||||
"F1",
|
||||
"F2",
|
||||
"F3",
|
||||
"F4",
|
||||
"F5",
|
||||
"F6",
|
||||
]
|
||||
|
||||
|
||||
def key_but(lbl,width=5):
|
||||
W = 5
|
||||
w2 = width//2
|
||||
l = len(lbl)
|
||||
l2 = l//2
|
||||
s = " "*W + lbl + " "*W
|
||||
x=W-(w2-l2)
|
||||
#print("[{}]".format(s[x:x+width]))
|
||||
return s[x:x+width]
|
||||
|
||||
|
||||
def gen_ix_map():
|
||||
x = 38
|
||||
for qq in range(43):
|
||||
if x == 44: x = 1
|
||||
y = sysmap.index(x)
|
||||
#print("{}-{}, ".format(x,y))
|
||||
print("{}, ".format(y),end='')
|
||||
x += 1
|
||||
|
||||
rowends=[43,6,12,17,22,27,32,37]
|
||||
|
||||
def print_layout(m):
|
||||
print("")
|
||||
row=1
|
||||
ln,lm = "",""
|
||||
x = 37 # Scan code
|
||||
for ix in key_ix_map:
|
||||
x += 1
|
||||
if x == 44: x = 1
|
||||
|
||||
kc = m[ix]
|
||||
bb = 1 if 17 < x < 38 else 0
|
||||
bw = bb + (5 if x!=13 else 11)
|
||||
lbl = key_lbls[kc]
|
||||
|
||||
ln += "|{}".format(key_but(lbl,bw))
|
||||
cod = "{:2}:{:2}".format(x,kc)
|
||||
lm += "|{}".format(key_but(cod,bw))
|
||||
if x in rowends:
|
||||
# ln
|
||||
el = " |" if bb else "|"
|
||||
ln += el
|
||||
lm += el
|
||||
# lnr
|
||||
lnr = " {}: ".format(row)
|
||||
lnf = " "*len(lnr)
|
||||
# ln2
|
||||
ln2 = re.sub('[^|]','-',ln)
|
||||
ln2 = re.sub('[|]','+',ln2)
|
||||
|
||||
if row==1:
|
||||
print(lnf+ln2)
|
||||
print(lnr+ln)
|
||||
print(lnf+lm)
|
||||
print(lnf+ln2)
|
||||
|
||||
ln,lm = "",""
|
||||
row += 1
|
||||
print("")
|
||||
|
||||
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print("""
|
||||
Usage: {} <keymap.txt>
|
||||
|
||||
""".format(sys.argv[0].split('/')[-1]))
|
||||
sys.exit(1)
|
||||
|
||||
fname = sys.argv[1]
|
||||
with open(fname) as f:
|
||||
lns = f.readlines()
|
||||
|
||||
keymap = eval("[" + "".join(lns) + "]")
|
||||
#print(keymap)
|
||||
if len(keymap) != 45:
|
||||
print("Unexpected len of keymap {} - exiting".format(len(keymap)))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
# Button label test
|
||||
#for lbl in key_lbls: print("|{}|".format(key_but(lbl)))
|
||||
|
||||
#gen_ix_map()
|
||||
|
||||
#print_layout(sysmap)
|
||||
|
||||
print_layout(keymap)
|
||||
|
102
keymap_utils/bin/mk_keymap
Executable file
102
keymap_utils/bin/mk_keymap
Executable file
|
@ -0,0 +1,102 @@
|
|||
#!/bin/bash
|
||||
|
||||
kbdnam=$1
|
||||
maptxt=$2
|
||||
|
||||
|
||||
|
||||
if [ -z "$2" ]; then
|
||||
cat << OI
|
||||
Usage: mk_keymap <name> <keymap.txt>
|
||||
OI
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f $maptxt ]; then
|
||||
echo "ERROR: Cannot find keymap file '$maptxt'."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# =============================================
|
||||
# Functions
|
||||
# =============================================
|
||||
|
||||
# $1 number
|
||||
# $2 fill char
|
||||
makefill() {
|
||||
local n z
|
||||
n=$1; z="$2"
|
||||
while [ ${#z} -lt $n ]; do
|
||||
z="$z$2"
|
||||
done
|
||||
printf "${z:0:$n}"
|
||||
}
|
||||
|
||||
toint() {
|
||||
local x
|
||||
x=`printf "$1" |
|
||||
sed -e 's|\(..\)|\1@|g' | tr '@' '\012' | tac | tr -d '\012' |
|
||||
sed -e 's|\(..\)|@\1|g' | sed -e 's|@|\\\x|g'`
|
||||
printf "$x"
|
||||
}
|
||||
|
||||
toint8() {
|
||||
local x
|
||||
x=`printf "$1" | sed -e 's|\(..\)|@\1|g' | sed -e 's|@|\\\x|g'`
|
||||
printf "$x"
|
||||
}
|
||||
|
||||
# $1 string
|
||||
# $2 number of bytes including final \0
|
||||
zstr() {
|
||||
local x n
|
||||
let n=$2-1
|
||||
x="${1}`makefill $2 @`" # Add some filling
|
||||
x=`sed -e 's|@|\\\0|g' <<< "${x:0:$n}@"`
|
||||
printf "$x"
|
||||
}
|
||||
|
||||
gethex() {
|
||||
for a in "$@"; do
|
||||
printf "%02x" $a
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
|
||||
getkeymapcodes() {
|
||||
cat $maptxt | tr ',\012' ' '
|
||||
}
|
||||
|
||||
check_keymapcodes() {
|
||||
scod=`echo "$codes" | tr ' ' '\012' | sort -n | tr '\012' ' '`
|
||||
hh=`gethex $scod`
|
||||
#echo "hh: $hh"
|
||||
if [ "$hh" != "$allcodes" ]; then
|
||||
echo "Bad code list in $maptxt"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
# =============================================
|
||||
# MAIN
|
||||
# =============================================
|
||||
|
||||
magic=D377D1BD
|
||||
kmap=keymap.bin
|
||||
|
||||
allcodes=0102030405060708090a0b0c0d0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c
|
||||
codes=`getkeymapcodes`
|
||||
|
||||
check_keymapcodes
|
||||
|
||||
hex=`gethex $codes`
|
||||
#echo "$hex"
|
||||
|
||||
toint "$magic" > $kmap
|
||||
zstr "$kbdnam" 16 >> $kmap
|
||||
toint8 "$hex" >> $kmap
|
||||
|
||||
|
9
keymap_utils/keymaps/base/keymap.txt
Normal file
9
keymap_utils/keymaps/base/keymap.txt
Normal file
|
@ -0,0 +1,9 @@
|
|||
33, 34, 35, 36, 37,
|
||||
28, 29, 30, 31, 32,
|
||||
23, 24, 25, 26, 27,
|
||||
18, 19, 20, 21, 22,
|
||||
13, 14, 15, 16, 17,
|
||||
8, 9, 10, 11, 12,
|
||||
2, 3, 4, 5, 6,
|
||||
39, 40, 41, 42, 43,
|
||||
44, 13, 7, 1, 38
|
BIN
keymap_utils/keymaps/empty/keymap.bin
Normal file
BIN
keymap_utils/keymaps/empty/keymap.bin
Normal file
Binary file not shown.
|
@ -34,6 +34,6 @@
|
|||
#define PROGRAM_NAME "DB50X"
|
||||
#define PROGRAM_VERSION DB48X_VERSION
|
||||
|
||||
#define PROGRAM_KEYMAP_ID 0x32334d44
|
||||
#define PROGRAM_KEYMAP_ID 0x38344244
|
||||
|
||||
#endif // MAIN_H
|
||||
|
|
|
@ -34,4 +34,6 @@
|
|||
#define PROGRAM_NAME "DB48X"
|
||||
#define PROGRAM_VERSION DB48X_VERSION
|
||||
|
||||
#define PROGRAM_KEYMAP_ID 0x38344244
|
||||
|
||||
#endif // MAIN_H
|
||||
|
|
Loading…
Reference in a new issue