minor code fix, rearranged README sections, updated launch info

This commit is contained in:
dekunukem
2022-02-12 09:46:53 +00:00
parent 28a8695719
commit 0a564e2723
6 changed files with 42 additions and 93 deletions

View File

@@ -50,28 +50,12 @@ Click to see USB4VC in action!
## Get One / Stay in Touch
A [Kickstarter campaign](kickstarter_info.md) is planned for USB4VC around **early March 2022**.
A [Kickstarter campaign](kickstarter_info.md) is planned for USB4VC around **March 2022**.
Please [sign up for launch notification](https://www.kickstarter.com/projects/dekunukem/usb4vc-usb-inputs-on-retro-computers) if you're interested! More Protocol Cards are on the way!
**Questions or comments?** Ask in [official Discord](https://discord.gg/HAuuh3pAmB), raise a [Github issue](https://github.com/dekuNukem/USB4VC/issues), [Twitter DM](https://twitter.com/dekuNukem_), or email `dekunukem` `gmail.com`!
## Beta Testing
I would love to have USB4VC tested on more machines before public release, to gather feedback and fix bugs.
If you have a decent working PC/Mac collection, let me know and I maybe can send you one!
Especially looking for:
* Testing on IBM PC XT/AT original and clones.
* PS4/PS5/Xbox Series X/S controllers for compatibility testing.
Everyone welcome, but **UK** users preferred due to shipping time and cost.
Let me know via [Discord](https://discord.gg/HAuuh3pAmB), [Twitter DM](https://twitter.com/dekuNukem_), or email `dekunukem` `gmail.com`!
## Highlights
* USB Keyboard/Mouse/Gamepads on Vintage Computers!
@@ -90,20 +74,6 @@ Let me know via [Discord](https://discord.gg/HAuuh3pAmB), [Twitter DM](https://t
* Powered by Raspberry Pi
## How it Works
USB4VC consists of two halves: **Baseboard** and swappable **Protocol Cards**.
![Alt text](photos/pcards.jpeg)
Baseboard contains user buttons, OLED screen, and a Raspberry Pi. It handles UI and input events, which are processed and sent to Protocol Card.
Protocol Cards plug into the Baseboard. Each has a dedicated microcontroller and the appropriate connectors for the target computer.
By splitting duties, RPi can focus on input parsing, and Protocol Card handles timing critical signal generation, resulting in a flexible architecture and reliable performance.
USB peripherals can be connected via cables, wireless dongles, or Bluetooth.
## Why / Project Goals
Before the homogeneity of USB peripherals today, computer input devices were a wild west of proprietary protocols and connectors, as different platforms used their own keyboards, mice, and gamepads.
@@ -128,6 +98,36 @@ But of course, one can argue that using period-correct peripherals is simply par
![Alt text](photos/duke3d.jpeg)
## How it Works
USB4VC consists of two halves: **Baseboard** and swappable **Protocol Cards**.
![Alt text](photos/pcards.jpeg)
Baseboard contains user buttons, OLED screen, and a Raspberry Pi. It handles UI and input events, which are processed and sent to Protocol Card.
Protocol Cards plug into the Baseboard. Each has a dedicated microcontroller and the appropriate connectors for the target computer.
By splitting duties, RPi can focus on input parsing, and Protocol Card handles timing critical signal generation, resulting in a flexible architecture and reliable performance.
USB peripherals can be connected via cables, wireless dongles, or Bluetooth.
## Beta Testing
I would love to have USB4VC tested on more machines before public release, to gather feedback and fix bugs.
If you have a decent working PC/Mac collection, let me know and I maybe can send you one!
Especially looking for:
* Testing on IBM PC XT/AT original and clones.
* PS4/PS5/Xbox Series X/S controllers for compatibility testing.
Everyone welcome, but **UK** users preferred due to shipping time and cost.
Let me know via [Discord](https://discord.gg/HAuuh3pAmB), [Twitter DM](https://twitter.com/dekuNukem_), or email `dekunukem` `gmail.com`!
## Getting Started
[Click me](getting_started.md)

View File

@@ -40,11 +40,11 @@ Timing might change depending on circumstances such as component availability an
## Launch Date, Duration, and Funding Goal
Exact launch date has not been determined yet, but I'm aiming for **early March 2022**.
Exact launch date has not been determined yet, but I'm aiming for **early-to-mid March 2022**.
Duration should be around 25 days, with campaign ending in **early April**.
Duration should be around 25 days, with campaign ending in **early-to-mid April**.
Funding goal is planned to be around **5000GBP** for the first production run. Costs include components, manufacturing, accessories, shipping and expenses.
Funding goal is planned to be around **4000GBP** for the first production run. Costs include components, manufacturing, accessories, shipping and expenses.
As mentioned before, more details will become available as launch plan is finalised. So please consider [signing up launch notification](https://www.kickstarter.com/projects/dekunukem/usb4vc-usb-inputs-on-retro-computers) and join our [Discord Chatroom](https://discord.gg/HAuuh3pAmB) for latest developments.

View File

@@ -1,52 +0,0 @@
import os
import time
from datetime import datetime
import webbrowser
# import check_update
from tkinter import *
from tkinter import filedialog
from tkinter import simpledialog
from tkinter import messagebox
import urllib.request
THIS_VERSION_NUMBER = '0.1.0'
MAIN_WINDOW_WIDTH = 800
MAIN_WINDOW_HEIGHT = 600
PADDING = 10
HEIGHT_CONNECT_LF = 60
root = Tk()
root.title("USB4VC Configurator v" + THIS_VERSION_NUMBER)
root.geometry(str(MAIN_WINDOW_WIDTH) + "x" + str(MAIN_WINDOW_HEIGHT))
root.resizable(width=FALSE, height=FALSE)
connection_lf = LabelFrame(root, text="Dashboard", width=MAIN_WINDOW_WIDTH - PADDING*2, height=HEIGHT_CONNECT_LF)
connection_lf.place(x=PADDING, y=0)
def open_user_manual_url():
webbrowser.open('https://github.com/dekuNukem/bob_cassette_rewinder/blob/master/user_manual.md')
def open_discord_link():
try:
webbrowser.open(str(urllib.request.urlopen(discord_link_url).read().decode('utf-8')).split('\n')[0])
except Exception as e:
messagebox.showerror("Error", "Failed to open discord link!\n"+str(e))
user_manual_button = Button(connection_lf, text="User Manual", command=open_user_manual_url)
user_manual_button.place(x=570, y=5, width=100)
discord_button = Button(connection_lf, text="Discord", command=open_discord_link)
discord_button.place(x=680, y=5, width=80)
open_button = Button(connection_lf, text="Open...", command=None)
open_button.place(x=10, y=5, width=80)
info_lf = LabelFrame(root, text="Status", width=MAIN_WINDOW_WIDTH - PADDING*2, height=120)
info_lf.place(x=PADDING, y=70)
mappings_lf = LabelFrame(root, text="Custom Mappings", width=MAIN_WINDOW_WIDTH - PADDING*2, height=390)
mappings_lf.place(x=PADDING, y=200)
root.update()
root.mainloop()

View File

@@ -333,7 +333,7 @@ protocol_id_lookup = {
'PS2_MOUSE':4,
'MICROSOFT_SERIAL_MOUSE':5,
'ADB_MOUSE':6,
'GAMEPORT_GENERIC_GAMEPAD':7,
'GAMEPORT_15PIN_GAMEPAD':7,
'GAMEPORT_GRAVIS_GAMEPAD':8,
'GAMEPORT_MICROSOFT_SIDEWINDER':9,
'RAW_KEYBOARD':125,

View File

@@ -129,7 +129,7 @@ PROTOCOL_ADB_KB = {'pid':3, 'display_name':"ADB"}
PROTOCOL_PS2_MOUSE = {'pid':4, 'display_name':"PS/2"}
PROTOCOL_MICROSOFT_SERIAL_MOUSE = {'pid':5, 'display_name':"Microsft Serial"}
PROTOCOL_ADB_MOUSE = {'pid':6, 'display_name':"ADB"}
PROTOCOL_GENERIC_GAMEPORT_GAMEPAD = {'pid':7, 'display_name':"Generic 15-Pin", 'mapping':IBM_GGP_DEAULT_MAPPING}
PROTOCOL_15PIN_GAMEPORT_GAMEPAD = {'pid':7, 'display_name':"Generic 15-Pin", 'mapping':IBM_GGP_DEAULT_MAPPING}
PROTOCOL_GAMEPORT_GRAVIS_GAMEPAD = {'pid':8, 'display_name':"Gravis Pro"}
PROTOCOL_GAMEPORT_MICROSOFT_SIDEWINDER = {'pid':9, 'display_name':"MS Sidewinder"}
PROTOCOL_RAW_KEYBOARD = {'pid':125, 'display_name':"Raw data"}
@@ -142,10 +142,11 @@ try:
onlyfiles = [f for f in os.listdir(config_dir_path) if os.path.isfile(os.path.join(config_dir_path, f))]
json_map_files = [os.path.join(config_dir_path, x) for x in onlyfiles if x.lower().startswith('usb4vc_map') and x.lower().endswith(".json")]
for item in json_map_files:
print('loading json file:', item)
with open(item) as json_file:
custom_profile_list.append(json.load(json_file))
except Exception as e:
print('load json maps:', e)
print('json load exception:', e)
def get_list_of_usb_drive():
usb_drive_set = set()
@@ -340,8 +341,8 @@ def oled_print_centered(text, font, y, this_canvas):
ibmpc_keyboard_protocols = [PROTOCOL_OFF, PROTOCOL_AT_PS2_KB, PROTOCOL_XT_KB]
ibmpc_mouse_protocols = [PROTOCOL_OFF, PROTOCOL_PS2_MOUSE, PROTOCOL_MICROSOFT_SERIAL_MOUSE]
# ibmpc_gamepad_protocols = [PROTOCOL_OFF, PROTOCOL_GENERIC_GAMEPORT_GAMEPAD, PROTOCOL_GAMEPORT_GRAVIS_GAMEPAD, PROTOCOL_GAMEPORT_MICROSOFT_SIDEWINDER]
ibmpc_gamepad_protocols = [PROTOCOL_OFF, PROTOCOL_GENERIC_GAMEPORT_GAMEPAD]
# ibmpc_gamepad_protocols = [PROTOCOL_OFF, PROTOCOL_15PIN_GAMEPORT_GAMEPAD, PROTOCOL_GAMEPORT_GRAVIS_GAMEPAD, PROTOCOL_GAMEPORT_MICROSOFT_SIDEWINDER]
ibmpc_gamepad_protocols = [PROTOCOL_OFF, PROTOCOL_15PIN_GAMEPORT_GAMEPAD]
adb_keyboard_protocols = [PROTOCOL_OFF, PROTOCOL_ADB_KB]
adb_mouse_protocols = [PROTOCOL_OFF, PROTOCOL_ADB_MOUSE]

View File

@@ -309,7 +309,7 @@ def make_generic_gamepad_spi_packet(gp_status_dict, gp_id, axes_info, mapping_in
if target_code not in curr_kb_output:
curr_kb_output[target_code] = set()
is_activated = 0
deadzone_amount = 19
deadzone_amount = 50
try:
deadzone_amount = int(127 * target_info['deadzone_percent'] / 100)
except Exception:
@@ -331,7 +331,7 @@ def make_generic_gamepad_spi_packet(gp_status_dict, gp_id, axes_info, mapping_in
# usb gamepad analog axes to mouse axes
if source_type == 'usb_abs_axis' and target_type == 'usb_rel_axis' and target_code in curr_mouse_output:
movement = convert_to_8bit_midpoint127(this_gp_dict[source_code], axes_info, source_code) - 127
deadzone_amount = 19
deadzone_amount = 20
try:
deadzone_amount = int(127 * target_info['deadzone_percent'] / 100)
except Exception: