diff --git a/server.py b/server.py index 8e8921d..389d2b8 100644 --- a/server.py +++ b/server.py @@ -1,12 +1,13 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +import datetime +import time import string from http.server import HTTPServer, BaseHTTPRequestHandler from io import BytesIO import string import base64 - NULL_CHAR = chr(0) file = open('/dev/hidg0', 'rb+') @@ -32,41 +33,73 @@ colors = { "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): file.write(report.encode()) def release_keys(): - write_report(NULL_CHAR*8) + write_report(NULL_CHAR * 8) def printchar(c): 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: - 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(): - write_report(NULL_CHAR*2+chr(0x1e + ((ord(c) - ord('0') - 1) % 10))+NULL_CHAR*5) - elif c == ' ': - write_report(NULL_CHAR*2+chr(44)+NULL_CHAR*5) - elif c == '\n': - write_report(NULL_CHAR*2+chr(40)+NULL_CHAR*5) + write_report(NULL_CHAR * 2 + chr(0x1e + ((ord(c) - ord('0') - 1) % 10)) + NULL_CHAR * 5) + elif c in special_chars: + write_report(special_chars[c][0] + NULL_CHAR + special_chars[c][1] + NULL_CHAR * 5) 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() def change_color(background, foreground): if background in colors and foreground in colors: # DELETE keypress - write_report(NULL_CHAR*2+chr(0x2a)+NULL_CHAR*5) + write_report(NULL_CHAR * 2 + chr(0x2a) + NULL_CHAR * 5) 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() - 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: 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() @@ -85,6 +118,11 @@ def reset_color(): change_color('Z', 'g') release_keys() +def beep(): + write_report(NULL_CHAR * 2 + chr(0x29) + 'ff' + NULL_CHAR * 3) + release_keys() + print('beep') + class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): @@ -106,6 +144,7 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): printstring('\n' * 32) else: printstring(message + '\n') + # beep() reset_color() file.flush()