Thanks boterham and francis.

This commit is contained in:
redfast00 2019-10-01 00:08:56 +02:00
parent 6e0ac923fa
commit 94a295b917
No known key found for this signature in database
GPG key ID: 5946E0E34FD0553C

View file

@ -1,12 +1,13 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import datetime
import time
import string import string
from http.server import HTTPServer, BaseHTTPRequestHandler from http.server import HTTPServer, BaseHTTPRequestHandler
from io import BytesIO from io import BytesIO
import string import string
import base64 import base64
NULL_CHAR = chr(0) NULL_CHAR = chr(0)
file = open('/dev/hidg0', 'rb+') file = open('/dev/hidg0', 'rb+')
@ -32,41 +33,73 @@ colors = {
"w": "p" # Light/blink White "w": "p" # Light/blink White
} }
special_chars = {
' ': [NULL_CHAR, chr(44)],
'\n': [NULL_CHAR, chr(40)],
'\\': [NULL_CHAR, chr(0x31)],
'.': [NULL_CHAR, chr(0x37)],
'/': [NULL_CHAR, chr(0x38)],
';': [NULL_CHAR, chr(0x33)],
'-': [NULL_CHAR, chr(0x2d)],
'=': [NULL_CHAR, chr(0x2e)],
'[': [NULL_CHAR, chr(0x2f)],
']': [NULL_CHAR, chr(0x30)],
'*': [NULL_CHAR, chr(0x55)],
',': [NULL_CHAR, chr(0x36)],
'!': [chr(32), chr(0x1e)],
'<': [chr(32), chr(0x36)],
'>': [chr(32), chr(0x37)],
'?': [chr(32), chr(0x38)],
':': [chr(32), chr(0x33)],
'(': [chr(32), chr(0x26)],
')': [chr(32), chr(0x27)],
'&': [chr(32), chr(0x24)],
'%': [chr(32), chr(0x22)],
'#': [chr(32), chr(0x20)],
'@': [chr(32), chr(0x1f)],
'$': [chr(32), chr(0x21)],
'_': [chr(32), chr(0x2d)],
'+': [chr(32), chr(0x2e)],
'{': [chr(32), chr(0x2f)],
'}': [chr(32), chr(0x30)],
'|': [chr(32), chr(0x31)],
'~': [chr(32), chr(0x35)],
}
def write_report(report): def write_report(report):
file.write(report.encode()) file.write(report.encode())
def release_keys(): def release_keys():
write_report(NULL_CHAR*8) write_report(NULL_CHAR * 8)
def printchar(c): def printchar(c):
if c in alphabet_lower: if c in alphabet_lower:
write_report(NULL_CHAR*2+chr(4 + ord(c) - ord('a'))+NULL_CHAR*5) write_report(NULL_CHAR * 2 + chr(4 + ord(c) - ord('a')) + NULL_CHAR * 5)
elif c in alphabet_upper: elif c in alphabet_upper:
write_report(chr(32)+NULL_CHAR+chr(4 + ord(c) - ord('A'))+NULL_CHAR*5) write_report(chr(32) + NULL_CHAR + chr(4 + ord(c) - ord('A')) + NULL_CHAR * 5)
elif c.isdigit(): elif c.isdigit():
write_report(NULL_CHAR*2+chr(0x1e + ((ord(c) - ord('0') - 1) % 10))+NULL_CHAR*5) write_report(NULL_CHAR * 2 + chr(0x1e + ((ord(c) - ord('0') - 1) % 10)) + NULL_CHAR * 5)
elif c == ' ': elif c in special_chars:
write_report(NULL_CHAR*2+chr(44)+NULL_CHAR*5) write_report(special_chars[c][0] + NULL_CHAR + special_chars[c][1] + NULL_CHAR * 5)
elif c == '\n':
write_report(NULL_CHAR*2+chr(40)+NULL_CHAR*5)
else: else:
write_report(chr(32)+NULL_CHAR+chr(0x38)+NULL_CHAR*5) write_report(chr(32) + NULL_CHAR + chr(0x38) + NULL_CHAR * 5)
release_keys() release_keys()
def change_color(background, foreground): def change_color(background, foreground):
if background in colors and foreground in colors: if background in colors and foreground in colors:
# DELETE keypress # DELETE keypress
write_report(NULL_CHAR*2+chr(0x2a)+NULL_CHAR*5) write_report(NULL_CHAR * 2 + chr(0x2a) + NULL_CHAR * 5)
release_keys() release_keys()
write_report(NULL_CHAR*2+chr(4 + ord(colors[background]) - ord('a'))+NULL_CHAR*5) write_report(NULL_CHAR * 2 + chr(4 + ord(colors[background]) - ord('a')) + NULL_CHAR * 5)
release_keys() release_keys()
write_report(NULL_CHAR*2+chr(4 + ord(colors[foreground]) - ord('a'))+NULL_CHAR*5) write_report(NULL_CHAR * 2 + chr(4 + ord(colors[foreground]) - ord('a')) + NULL_CHAR * 5)
else: else:
print('Malformed Color code: §' + background + foreground) print('Malformed Color code: §' + background + foreground)
write_report(chr(32)+NULL_CHAR+chr(0x38)+NULL_CHAR*5) write_report(chr(32) + NULL_CHAR + chr(0x38) + NULL_CHAR * 5)
release_keys() release_keys()
@ -85,6 +118,11 @@ def reset_color():
change_color('Z', 'g') change_color('Z', 'g')
release_keys() release_keys()
def beep():
write_report(NULL_CHAR * 2 + chr(0x29) + 'ff' + NULL_CHAR * 3)
release_keys()
print('beep')
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
@ -106,6 +144,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
printstring('\n' * 32) printstring('\n' * 32)
else: else:
printstring(message + '\n') printstring(message + '\n')
# beep()
reset_color() reset_color()
file.flush() file.flush()