mirror of
https://github.com/dekuNukem/USB4VC.git
synced 2025-10-31 11:26:46 -07:00
minor code fix, rearranged README sections, updated launch info
This commit is contained in:
62
README.md
62
README.md
@@ -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**.
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
## How it Works
|
||||
|
||||
USB4VC consists of two halves: **Baseboard** and swappable **Protocol Cards**.
|
||||
|
||||

|
||||
|
||||
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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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()
|
||||
@@ -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,
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user