From e7d67d4e8d63e7688abceec547d6bdbfa24186e4 Mon Sep 17 00:00:00 2001 From: pepepper Date: Mon, 4 Jan 2021 19:29:47 +0900 Subject: [PATCH] add SH3 key scanner --- README.md | 2 +- read_keys_SH3.py | 181 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 read_keys_SH3.py diff --git a/README.md b/README.md index b1da604..282bb9e 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ - [read_keys.py](read_keys.py) Initialize the keyboard MCU and poll key code - + - [read_keys_SH3.py](read_keys_SH3.py) Scan key matrix and return key name ### License diff --git a/read_keys_SH3.py b/read_keys_SH3.py new file mode 100644 index 0000000..5e20171 --- /dev/null +++ b/read_keys_SH3.py @@ -0,0 +1,181 @@ +import gpio #https://github.com/vitiral/gpio +import time + +def setup(): + #Bank2 Pin16~PIN21 + gpio.setup(80,gpio.OUT) + gpio.setup(81,gpio.OUT) + gpio.setup(82,gpio.OUT) + gpio.setup(83,gpio.OUT) + gpio.setup(84,gpio.OUT) + gpio.setup(85,gpio.OUT) + #Bank4 Pin0~7 + gpio.setup(128,gpio.IN) + gpio.setup(129,gpio.IN) + gpio.setup(130,gpio.IN) + gpio.setup(131,gpio.IN) + gpio.setup(132,gpio.IN) + gpio.setup(133,gpio.IN) + gpio.setup(134,gpio.IN) + gpio.setup(135,gpio.IN) + #Bank4 Pin8 + gpio.setup(136,gpio.OUT) + +def keyread(): + keys = [] + for writeport in range(80,87): + if writeport == 86: + writeport=136 + gpio.set(writeport,1) + time.sleep(0.002) + key = 0 + for readport in range(135,127,-1): + key = (key << 1) + gpio.read(readport) + key=~((key ^ (key >> 1)) & 0x1f ^ (key >> 1)) & 0x7f + keys.append(key) + gpio.set(writeport,0) + verify_keys = [] + for writeport in range(80,87): + if writeport == 86: + writeport=136 + gpio.set(writeport,1) + time.sleep(0.001) + key = 0 + for readport in range(135,127,-1): + key = (key << 1) + gpio.read(readport) + key=~((key ^ (key >> 1)) & 0x1f ^ (key >> 1)) & 0x7f + verify_keys.append(key) + gpio.set(writeport,0) + if not keys == verify_keys: + return + temp = 0 + for key in keys: + temp = temp | key + if temp & 0x1: + for i,key in enumerate(keys): + if key & 0x1 == 0: + if i==0: + print("英和和英",end=" ") + if i==1: + print("調べる",end=" ") + if i==2: + print("国語漢字",end=" ") + if i==3: + print("My辞書",end=" ") + if i==4: + print("履歴/しおり",end=" ") + if i==5: + print("マーカーテスト",end=" ") + if i==6: + print("HOME",end=" ") + if temp & 0x2: + for i,key in enumerate(keys): + if key & 0x2 == 0: + if i==0: + print("Q",end=" ") + if i==1: + print("W",end=" ") + if i==2: + print("E",end=" ") + if i==3: + print("T",end=" ") + if i==4: + print("Y",end=" ") + if i==5: + print("U",end=" ") + if i==6: + print("I",end=" ") + if temp & 0x4: + for i,key in enumerate(keys): + if key & 0x4 == 0: + if i==0: + print("A",end=" ") + if i==1: + print("S",end=" ") + if i==2: + print("D",end=" ") + if i==3: + print("G",end=" ") + if i==4: + print("H",end=" ") + if i==5: + print("O",end=" ") + if i==6: + print("P",end=" ") + if temp & 0x8: + for i,key in enumerate(keys): + if key & 0x8 == 0: + if i==0: + print("Z",end=" ") + if i==1: + print("X",end=" ") + if i==2: + print("C",end=" ") + if i==3: + print("B",end=" ") + if i==4: + print("J",end=" ") + if i==5: + print("K",end=" ") + if i==6: + print("L",end=" ") + if temp & 0x10: + for i,key in enumerate(keys): + if key & 0x10 == 0: + if i==0: + print("Shift",end=" ") + if i==1: + print("R",end=" ") + if i==2: + print("F",end=" ") + if i==3: + print("記号",end=" ") + if i==4: + print("N",end=" ") + if i==5: + print("M",end=" ") + if i==6: + print("-",end=" ") + if temp & 0x20: + for i,key in enumerate(keys): + if key & 0x20 == 0: + if i==0: + print("V",end=" ") + if i==1: + print("PageUp",end=" ") + if i==2: + print("Space",end=" ") + if i==3: + print("Left",end=" ") + if i==4: + print("Up",end=" ") + if i==5: + print("Down",end=" ") + if i==6: + print("Right",end=" ") + if temp & 0x40: + for i,key in enumerate(keys): + if key & 0x40 == 0: + if i==0: + print("文字切替",end=" ") + if i==1: + print("PageDown",end=" ") + if i==2: + print("ツール",end=" ") + if i==3: + print("Esc",end=" ") + if i==4: + print("Enter",end=" ") + if i==5: + print("?",end=" ") + if i==6: + print("BackSpace",end=" ") + keys = [f"{key:#04x}" for key in keys] + + if not temp==0: + print(f"\nKeys = {', '.join(keys)}") + +setup() +while True: + time.sleep(0.001) + keyread()