diff --git a/.github/workflows/generate-docs.yaml b/.github/workflows/merge-actions.yaml similarity index 69% rename from .github/workflows/generate-docs.yaml rename to .github/workflows/merge-actions.yaml index 3f22513..89fef72 100644 --- a/.github/workflows/generate-docs.yaml +++ b/.github/workflows/merge-actions.yaml @@ -1,12 +1,10 @@ -name: Generate the documentation from the JSON Schemas - on: push: branches: - main - - docs jobs: generate_doc: + name: Generate the documentation from the JSON Schemas runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -16,6 +14,10 @@ jobs: contents: write steps: - uses: actions/checkout@v3 + - uses: actions/checkout@v3 + with: + repository: ${{ github.repository }}.wiki + path: .wiki - uses: actions/setup-python@v4 with: python-version: "3.11" @@ -28,27 +30,24 @@ jobs: - name: Install json-schema-for-humans run: pip install json-schema-for-humans - - name: Create documentation directory - run: mkdir -p _docs - - name: Generate the documentation run: | - generate-schema-doc --config template_name=md_nested ./.schema/controller.json ./_docs/controller.md - generate-schema-doc --config template_name=md_nested ./.schema/manufacturer.json ./_docs/manufacturer.md - generate-schema-doc --config template_name=md_nested ./.schema/category.json ./_docs/category.md + generate-schema-doc --config template_name=md_nested ./.schema/controller.json "./.wiki/Controller Definition.md" + generate-schema-doc --config template_name=md_nested ./.schema/manufacturer.json "./.wiki/Manufacturer Definition.md" + generate-schema-doc --config template_name=md_nested ./.schema/category.json "./.wiki/Category Definition.md" + + - name: Generate Conntroller List + run: | + python3 .utilities/generate_controller_tables.py - run: git pull - name: Commit files run: | + cd .wiki git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add * if ! git diff-index --quiet HEAD; then git commit -m "Update documentation" -a fi - - - name: push changes - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - branch: ${{ steps.extract_branch.outputs.branch }} \ No newline at end of file + git push diff --git a/.github/workflows/validate-json.yaml b/.github/workflows/validate-json.yaml index a0a9c02..1211c11 100644 --- a/.github/workflows/validate-json.yaml +++ b/.github/workflows/validate-json.yaml @@ -2,19 +2,12 @@ on: pull_request: branches: - main -name: Validate JSON + jobs: validate: + name: Validate JSON Files against schemas runs-on: ubuntu-latest - permissions: - pull-requests: write steps: - - name: Delete previous comment - uses: izhangzhihao/delete-comment@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - delete_user_name: github-actions[bot] - issue_number: ${{ github.event.number }} - uses: actions/checkout@v3 - name: Validate Category JSON uses: dsanders11/json-schema-validate-action@v1.1.0 @@ -31,9 +24,16 @@ jobs: with: schema: ".schema/controller.json" files: "*/*/*/config.json" - - name: Comment PR - if: failure() - uses: thollander/actions-comment-pull-request@v2.5.0 - with: - message: | - Validation of the JSON files has failed, please check the [Github Action log](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) to see why \ No newline at end of file + - name: Send status + if: ${{ success() }} + run: | + curl --request POST \ + --url https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.sha }} \ + --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \ + --header 'content-type: application/json' \ + --data '{ + "context": "Validate JSON Files against schemas", + "state": "success", + "description": "JSON Files are valid", + "target_url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" + }' diff --git a/.gitignore b/.gitignore index f95c20a..1dd89d1 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -.schema/template.json \ No newline at end of file +.schema/template.json +.schema/.json_schema.json +.wiki \ No newline at end of file diff --git a/.schema/category.json b/.schema/category.json index 8c61213..e789bc6 100644 --- a/.schema/category.json +++ b/.schema/category.json @@ -1,4 +1,5 @@ { + "$id": "ControllerDatabase_category", "$schema": "http://json-schema.org/draft-06/schema#", "$ref": "#/definitions/CategoryDefinition", "definitions": { diff --git a/.schema/controller.json b/.schema/controller.json index 43c5a82..8027eda 100644 --- a/.schema/controller.json +++ b/.schema/controller.json @@ -1,4 +1,5 @@ { + "$id": "ControllerDatabase_controller", "$schema": "http://json-schema.org/draft-06/schema#", "$ref": "#/definitions/ControllerDefinition", "definitions": { @@ -541,10 +542,14 @@ "additionalProperties": false, "properties": { "name": { - "type": "string" + "type": "string", + "title": "Name" }, "image": { - "type": "string" + "type": "string", + "pattern": "(.*)\\.(p|P)(n|N)(g|G)", + "title": "Image", + "description": "Name of a PNG image showing the mentionned variant\nThe image must be placed in the same folder as this config file\nNote: At least one of the variants must use the default `image.png` file" } }, "required": [ diff --git a/.schema/manufacturer.json b/.schema/manufacturer.json index 75d47d4..d9ac1a0 100644 --- a/.schema/manufacturer.json +++ b/.schema/manufacturer.json @@ -1,4 +1,5 @@ { + "$id": "ControllerDatabase_manufacturer", "$schema": "http://json-schema.org/draft-06/schema#", "$ref": "#/definitions/ManufacturerDefinition", "definitions": { diff --git a/.utilities/consoles_list.json b/.utilities/consoles_list.json new file mode 100644 index 0000000..ba3f564 --- /dev/null +++ b/.utilities/consoles_list.json @@ -0,0 +1,21 @@ +{ + "dc": "Sega Dreamcast", + "n64": "Nintendo 64", + "nes": "Nintendo Entertainment System / Famicom", + "ngc": "Nintendo GameCube", + "nsw": "Nintendo Switch", + "ps1": "Sony PlayStation 1", + "ps2": "Sony PlayStation 2", + "ps3": "Sony PlayStation 3", + "ps4": "Sony PlayStation 4", + "ps5": "Sony PlayStation 5", + "saturn": "Sega Saturn", + "smd": "Sega Mega Drive / Sega Genesis", + "snes": "Super Nintendo Entertainment System / Super Famicom", + "wii": "Nintendo Wii", + "wiiu": "Nintendo Wii U", + "xb1": "Xbox One", + "xb360": "Xbox 360", + "xbox": "Xbox", + "xbs": "Xbox Series X|S" +} \ No newline at end of file diff --git a/.utilities/generate_controller_tables.py b/.utilities/generate_controller_tables.py new file mode 100644 index 0000000..7519b24 --- /dev/null +++ b/.utilities/generate_controller_tables.py @@ -0,0 +1,347 @@ +import json +import textwrap +import glob +from copy import deepcopy + +with open(".utilities/consoles_list.json") as json_file: + consoles_dict = json.loads(json_file.read()) + +def bool_to_emoji(boolean: bool): + if boolean: + return("✔️") + else: + return("❌") + +def str_to_emoji(string: str): + if string: + if string == "+": + return("➕") + if string == "-": + return("➖") + return(string) + else: + return("❌") + +def process_list(source: list, level = 1): + result = "" + for i in range(len(source)): + result += f""" +{'#'*level} `{i}` +""" + if not source[i] and (type(source[i])!=bool): + result += "None\n" + elif type(source[i]) in (int, float, str, bool): + result += f"{source[i]}\n" + elif type(source[i])==dict: + result += f""" +
+ +{process_dict(source[i], level+1)} + +
+""" + elif type(source[i])==list: + result += f""" +
+ +{process_list(source[i], level+1)} + +
+ +""" + return(result) + + +def process_dict(source: dict, level = 1): + result = "" + source = {key: source[key] for key in sorted(source)} + for key in source.keys(): + result += f""" +{'#'*level} `{key}` +""" + if not source[key] and (type(source[key])!=bool): + result += "None\n" + elif type(source[key]) in (int, float, str, bool): + result += f"{source[key]}\n" + elif type(source[key])==dict: + result += f""" +
+ +{process_dict(source[key], level+1)} + +
+ +""" + elif type(source[key])==list: + result += f""" +
+ +{process_list(source[key], level+1)} + +
+ +""" + return(result) + +def process_socd(list_socd): + result = "" + if list_socd: + for i in range(len(list_socd)): + if i != 0: + if i == len(list_socd)-1: + result += " or " + else: + result += ", " + if list_socd[i] == "disable": + result += "Disabled" + if list_socd[i] == "neutral": + result += "Neutral" + if list_socd[i] == "last_input": + result += "Last Direction" + if list_socd[i] == "first_input": + result += "First Direction" + if list_socd[i] == "up": + result += "Always Up" + else: + result += bool_to_emoji(False) + return(result) + +def process_directional_buttons(list_buttons, title="Directional Buttons", level = 1): + result ="" + if list_buttons: + result += f"""{'#'*level} {title} + +""" + for i in range(len(list_buttons)): + button_set = list_buttons[i] + result += process_list_string(button_set["set"], title=f"Set #{i+1}", level=level+1) + result += "**SOCD Cleaning**\n\n" + result += f"- Hardware SOCD Cleaning: {bool_to_emoji(button_set['socd_prevention']['hardware'])}\n" + if button_set['socd_prevention']['software']: + result += f"- Software SOCD Cleaning:\n" + result += f" - Left + Right: {process_socd(button_set['socd_prevention']['software']['left_right'])}\n" + result += f" - Up + Down: {process_socd(button_set['socd_prevention']['software']['up_down'])}\n" + else: + result += f"- Software SOCD Cleaning: {bool_to_emoji(False)}\n" + + result += "\n" + return(result) + + +def process_stick_or_trackpad(list_stick, title="Analog Sticks", level = 1): + result ="" + if list_stick: + result += f"""{'#'*level} {title} + +| Name | Clickable | +| :---: | :---: | +""" + for stick in list_stick: + clickable = stick.get("has_button") or stick.get("clickable") + result += f"| {stick['name']} | {bool_to_emoji(clickable)} |\n" + result += "\n" + return(result) + +def process_screen(list_screen, title="Touch Screens", level = 1): + result = "" + if list_screen: + result += f"""{'#'*level} {title} + +| Index | Resolution | Type | +| :---: | :---: | :---: | +""" + for i in range(len(list_screen)): + screen = list_screen[i] + resolution = f"{screen['resolution'][0]}x{screen['resolution'][1]}" + result += f"| {i+1} | {resolution} | {screen['type'].title()} |\n" + result += "\n" + return(result) + +def process_list_string(list_str, title="Menu Buttons", level = 1): + result = "" + if list_str: + result += f"""{'#'*level} {title} + +""" + for button_name in list_str: + result += f"- {str_to_emoji(button_name)}\n" + result += "\n" + return(result) + +def process_digital_to_analog(list_digital_analog, title="Digital-to-Analog Conversion Features", level = 1): + result = "" + if list_digital_analog: + result += f"""{'#'*level} {title} + +| Emulated Input | Type of conversion | Associated Modifier Buttons | +| :---: | :---: | :---: | +""" + for conversion in list_digital_analog: + if conversion["type"] == "8_way": + type_conversion = "8-way Movement" + if conversion["type"] == "button": + type_conversion = "Full Button Press" + if conversion["type"] == "precision": + type_conversion = "Precise Input" + result += f"| {conversion['emulated_analog']} | {type_conversion} | {conversion['modifier_buttons']} |\n" + result += "\n" + return(result) + +def process_functions(functions:dict, level=1): + result = "" + + # Sticks / Trackpads + result += process_stick_or_trackpad(functions["analog_sticks"], title="Analog Sticks", level=level) + result += process_stick_or_trackpad(functions["digital_sticks"], title="Digital Sticks", level=level) + result += process_stick_or_trackpad(functions["trackpads"], title="Trackpads", level=level) + + # Directional Buttons + result += process_directional_buttons(functions["directional_buttons"], title="Directional Buttons", level=level) + + # Action Buttons + if functions.get("action_buttons"): + result += f"""{'#'*level} Action Buttons + +| Name | Analog | +| :---: | :---: | +""" + for button in functions.get("action_buttons"): + result += f"| {button['name']} | {bool_to_emoji(button['analog'])} |\n" + result += "\n" + + # Other Buttons + result += process_list_string(functions.get("menu_buttons"), title="Menu Buttons", level=level) + result += process_list_string(functions.get("system_buttons"), title="System Buttons", level=level) + result += process_list_string(functions.get("other_buttons"), title="Other Buttons", level=level) + + # Digital-to-Analog conversion + result += process_digital_to_analog(functions.get("digital_to_analog_conversion"), title="Digital-to-Analog Conversion Features", level=level) + + # Touch Screens + result += process_screen(functions.get("touch_screens"), title="Touch Screens", level=level) + + # Cable info + if functions.get("cable"): + result += f"""{'#'*level} Cable + +- Interface: {functions['cable']['interface']} +- Removable: {bool_to_emoji(functions['cable']['removable'])} + +""" + + # Other functions + rumble = str_to_emoji(functions['rumble']) + + result += f"""{'#'*level} Other Features + +| Feature | Value | +| :---: | :---: | +| Macro | {bool_to_emoji(functions['macro'])} | +| Turbo | {bool_to_emoji(functions['turbo'])} | +| Accelerometer | {bool_to_emoji(functions['accelerometer'])} | +| Gyroscope | {bool_to_emoji(functions['gyroscope'])} | +| IR Reciever | {bool_to_emoji(functions['ir_reciever'])} | +| Extension Ports | {functions['extension_ports']} | +| Headset Port | {bool_to_emoji(functions['headset_port'])} | +| Speaker | {bool_to_emoji(functions['speaker'])} | +| Microphone | {bool_to_emoji(functions['microphone'])} | +| Rumble | {rumble.title()} | +| Bluetooth | {bool_to_emoji(functions['bluetooth'])} | +| 2.4GHz Wireless | {bool_to_emoji(functions['2_4ghz'])} | +| XInput | {bool_to_emoji(functions['pc_xinput'])} | +| Steam Input Compatibility | {bool_to_emoji(functions['pc_steaminput'])} |""" + + return(result) + +def process_controller(path, level = 1): + with open(f"{path}/config.json", "rt", encoding="utf-8") as json_file: + controller = json.loads(json_file.read()) + image_url = f"https://raw.githubusercontent.com/Wolfy76700/ControllerDatabase/main/{path}/image.png" + result = f"{'#'*level} {controller['name']}\n" + result += f""" + +{controller['name']} + + +""" + if controller.get("source"): + result += f"*More information: {controller.get('source')}*\n\n" + if controller["functions"].get("native_consoles"): + result += f"{'#'*(level+1)} Native console compatibility\n\n" + sorted_list = deepcopy(controller["functions"].get("native_consoles")) + sorted_list.sort() + for console in sorted_list: + result += f"- {consoles_dict[console]}\n" + result += "\n" + result += f"""{'#'*(level+1)} Functions + +
+ +{process_functions(controller["functions"], level=level+2)} + +
+ +""" + if controller.get("variants"): + result += f"""{'#'*(level+1)} Variants + +
+ +""" + for variant in controller.get("variants"): + result += f"""{'#'*(level+2)} {variant['name']} + + +{variant['name']} + + +""" + result += f"
\n\n" + + + return(result) + +def process_manufacturer(path, level=1): + with open(f"{path}/config.json", "rt", encoding="utf-8") as json_file: + manufacturer = json.loads(json_file.read()) + list_folders = glob.glob(f"{path}/*/") + list_folders.sort() + if not list_folders: + return("") + result = f"{'#'*level} {manufacturer['name']}\n\n" + for folder in list_folders: + result += process_controller(folder.replace("\\", "/"), level+1) + return(result) + +def process_category(path, level=1): + with open(f"{path}/config.json", "rt", encoding="utf-8") as json_file: + category = json.loads(json_file.read()) + list_folders = glob.glob(f"{path}/*/") + list_folders.sort() + if not list_folders: + return("") + result = f"{'#'*level} {category['name']}\n\n*{category['desc']}*\n\n" + for folder in list_folders: + result += process_manufacturer(folder.replace("\\", "/"), level+1) + return(result) + +def process_all(): + list_folders = glob.glob(f"*/") + result = "" + for folder in list_folders: + print(folder) + result += process_category(folder.replace("\\", "/")) + return(result) + +def create_consoles_table(): + result = "| ID | Name |\n| :---: | :--- |\n" + for console in consoles_dict.keys(): + result += f"| `{console}` | {consoles_dict[console]} |\n" + with open(".wiki/Console IDs.md", "wt", encoding="utf-8") as md_file: + md_file.write(result) + +result = process_all() +create_consoles_table() + +with open(".wiki/List of controllers.md", "wt", encoding="utf-8") as md_file: + md_file.write(result) diff --git a/README.md b/README.md index df6352b..617e164 100644 --- a/README.md +++ b/README.md @@ -16,27 +16,3 @@ Here’s the general arborescence for this repository: │ │ ├─ image.png Picture of the controller │ │ ├─ {variant}.png Any image related to an alternative way to use the controller, either connected with an accessory or in a different configuration (See Joy-Con for examples) ``` - -## Console IDs - -| ID | Console | -| :---- | :---- | -| `ps1` | PlayStation 1 | -| `ps2` | PlayStation 2 | -| `ps3` | PlayStation 3 | -| `ps4` | PlayStation 4 | -| `ps5` | PlayStation 5 | -| `xbox` | Xbox | -| `xb360` | Xbox 360 | -| `xb1` | Xbox One | -| `xbs` | Xbox Series X\|S | -| `nes` | Nintendo Entertainment System / Famicom | -| `snes` | Super Nintendo Entertainment System / Super Famicom | -| `n64` | Nintendo 64 | -| `ngc` | Nintendo GameCube | -| `wii` | Nintendo Wii | -| `wiiu` | Nintendo Wii U | -| `nsw` | Nintendo Switch | -| `smd` | Sega Mega Drive / Sega Genesis | -| `saturn` | Sega Saturn | -| `dc` | Sega Dreamcast | diff --git a/_docs/category.md b/_docs/category.md deleted file mode 100644 index 598f2e7..0000000 --- a/_docs/category.md +++ /dev/null @@ -1,54 +0,0 @@ -# Schema Docs - -- [1. [Required] Property Category > name](#name) -- [2. [Required] Property Category > desc](#desc) - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/CategoryDefinition | - -**Description:** Groups controllers which have similar attributes - -
- - 1. [Required] Property Category > name - - -
- -**Title:** Name - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** Name of the category - -
-
- -
- - 2. [Required] Property Category > desc - - -
- -**Title:** Description - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** Description of the category - -
-
- ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2024-03-16 at 11:32:34 +0000 \ No newline at end of file diff --git a/_docs/controller.md b/_docs/controller.md deleted file mode 100644 index cdbdd40..0000000 --- a/_docs/controller.md +++ /dev/null @@ -1,1426 +0,0 @@ -# Schema Docs - -- [1. [Required] Property Controller > name](#name) -- [2. [Required] Property Controller > functions](#functions) - - [2.1. [Required] Property Controller > functions > analog_sticks](#functions_analog_sticks) - - [2.1.1. Controller > functions > analog_sticks > AnalogStick](#autogenerated_heading_2) - - [2.1.1.1. [Required] Property Controller > functions > analog_sticks > Analog Stick > name](#functions_analog_sticks_items_name) - - [2.1.1.2. [Required] Property Controller > functions > analog_sticks > Analog Stick > has_button](#functions_analog_sticks_items_has_button) - - [2.2. [Required] Property Controller > functions > digital_sticks](#functions_digital_sticks) - - [2.2.1. Controller > functions > digital_sticks > DigitalStick](#autogenerated_heading_3) - - [2.2.1.1. [Required] Property Controller > functions > digital_sticks > Digital Stick > name](#functions_digital_sticks_items_name) - - [2.2.1.2. [Required] Property Controller > functions > digital_sticks > Digital Stick > has_button](#functions_digital_sticks_items_has_button) - - [2.3. [Required] Property Controller > functions > action_buttons](#functions_action_buttons) - - [2.3.1. Controller > functions > action_buttons > ActionButton](#autogenerated_heading_4) - - [2.3.1.1. [Required] Property Controller > functions > action_buttons > Action Button > name](#functions_action_buttons_items_name) - - [2.3.1.2. [Required] Property Controller > functions > action_buttons > Action Button > analog](#functions_action_buttons_items_analog) - - [2.3.1.3. [Optional] Property Controller > functions > action_buttons > Action Button > clickable](#functions_action_buttons_items_clickable) - - [2.4. [Required] Property Controller > functions > menu_buttons](#functions_menu_buttons) - - [2.4.1. Controller > functions > menu_buttons > menu_buttons items](#autogenerated_heading_5) - - [2.5. [Required] Property Controller > functions > system_buttons](#functions_system_buttons) - - [2.5.1. Controller > functions > system_buttons > system_buttons items](#autogenerated_heading_6) - - [2.6. [Required] Property Controller > functions > other_buttons](#functions_other_buttons) - - [2.6.1. Controller > functions > other_buttons > other_buttons items](#autogenerated_heading_7) - - [2.7. [Required] Property Controller > functions > trackpads](#functions_trackpads) - - [2.7.1. Controller > functions > trackpads > Trackpad](#autogenerated_heading_8) - - [2.7.1.1. [Required] Property Controller > functions > trackpads > Trackpad > name](#functions_trackpads_items_name) - - [2.7.1.2. [Required] Property Controller > functions > trackpads > Trackpad > clickable](#functions_trackpads_items_clickable) - - [2.8. [Required] Property Controller > functions > touch_screens](#functions_touch_screens) - - [2.8.1. Controller > functions > touch_screens > TouchScreen](#autogenerated_heading_9) - - [2.8.1.1. [Required] Property Controller > functions > touch_screens > Touch Screen > resolution](#functions_touch_screens_items_resolution) - - [2.8.1.1.1. Controller > functions > touch_screens > Touch Screen > resolution > resolution items](#autogenerated_heading_10) - - [2.8.1.2. [Required] Property Controller > functions > touch_screens > Touch Screen > type](#functions_touch_screens_items_type) - - [2.9. [Required] Property Controller > functions > directional_buttons](#functions_directional_buttons) - - [2.9.1. Controller > functions > directional_buttons > DirectionalButton](#autogenerated_heading_11) - - [2.9.1.1. [Required] Property Controller > functions > directional_buttons > Directional Button Set > set](#functions_directional_buttons_items_set) - - [2.9.1.1.1. Controller > functions > directional_buttons > Directional Button Set > set > set items](#autogenerated_heading_12) - - [2.9.1.2. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention](#functions_directional_buttons_items_socd_prevention) - - [2.9.1.2.1. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention > hardware](#functions_directional_buttons_items_socd_prevention_hardware) - - [2.9.1.2.2. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software](#functions_directional_buttons_items_socd_prevention_software) - - [2.9.1.2.2.1. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software > left_right](#functions_directional_buttons_items_socd_prevention_software_left_right) - - [2.9.1.2.2.1.1. Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software > left_right > left_right items](#autogenerated_heading_13) - - [2.9.1.2.2.2. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software > up_down](#functions_directional_buttons_items_socd_prevention_software_up_down) - - [2.9.1.2.2.2.1. Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software > up_down > up_down items](#autogenerated_heading_14) - - [2.10. [Required] Property Controller > functions > gyroscope](#functions_gyroscope) - - [2.11. [Required] Property Controller > functions > accelerometer](#functions_accelerometer) - - [2.12. [Required] Property Controller > functions > macro](#functions_macro) - - [2.13. [Required] Property Controller > functions > turbo](#functions_turbo) - - [2.14. [Required] Property Controller > functions > ir_reciever](#functions_ir_reciever) - - [2.15. [Required] Property Controller > functions > extension_ports](#functions_extension_ports) - - [2.16. [Required] Property Controller > functions > headset_port](#functions_headset_port) - - [2.17. [Required] Property Controller > functions > speaker](#functions_speaker) - - [2.18. [Required] Property Controller > functions > microphone](#functions_microphone) - - [2.19. [Required] Property Controller > functions > cable](#functions_cable) - - [2.19.1. [Required] Property Controller > functions > cable > interface](#functions_cable_interface) - - [2.19.2. [Required] Property Controller > functions > cable > removable](#functions_cable_removable) - - [2.20. [Required] Property Controller > functions > bluetooth](#functions_bluetooth) - - [2.21. [Required] Property Controller > functions > 2_4ghz](#functions_2_4ghz) - - [2.22. [Required] Property Controller > functions > rumble](#functions_rumble) - - [2.23. [Required] Property Controller > functions > digital_to_analog_conversion](#functions_digital_to_analog_conversion) - - [2.23.1. Controller > functions > digital_to_analog_conversion > DigitalToAnalogConversion](#autogenerated_heading_15) - - [2.23.1.1. [Required] Property Controller > functions > digital_to_analog_conversion > Digital-to-Analog Conversion > emulated_analog](#functions_digital_to_analog_conversion_items_emulated_analog) - - [2.23.1.2. [Required] Property Controller > functions > digital_to_analog_conversion > Digital-to-Analog Conversion > type](#functions_digital_to_analog_conversion_items_type) - - [2.23.1.3. [Required] Property Controller > functions > digital_to_analog_conversion > Digital-to-Analog Conversion > modifier_buttons](#functions_digital_to_analog_conversion_items_modifier_buttons) - - [2.24. [Required] Property Controller > functions > pc_xinput](#functions_pc_xinput) - - [2.25. [Required] Property Controller > functions > pc_steaminput](#functions_pc_steaminput) - - [2.26. [Required] Property Controller > functions > native_consoles](#functions_native_consoles) - - [2.26.1. Controller > functions > native_consoles > native_consoles items](#autogenerated_heading_16) -- [3. [Optional] Property Controller > source](#source) -- [4. [Optional] Property Controller > variants](#variants) - - [4.1. Controller > variants > Variant](#autogenerated_heading_17) - - [4.1.1. [Required] Property Controller > variants > Variant > name](#variants_items_name) - - [4.1.2. [Required] Property Controller > variants > Variant > image](#variants_items_image) - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/ControllerDefinition | - -**Description:** Controller Definition -Note: Any consideration related to buttons and their categorization should be related to the default mapping of said buttons - -
- - 1. [Required] Property Controller > name - - -
- -**Title:** Name - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** Name of the device - -
-
- -
- - 2. [Required] Property Controller > functions - - -
- -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/Functions | - -**Description:** Functionalities of the controller - -
- - 2.1. [Required] Property Controller > functions > analog_sticks - - -
- -| | | -| ------------ | --------------- | -| **Type** | `array or null` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| --------------------------------------------- | ------------------------------------------------------------------------------------------------------ | -| [AnalogStick](#functions_analog_sticks_items) | Control stick offering fine-tuned control beyond the traditional 8 directions of a directional pad ... | - -#### 2.1.1. Controller > functions > analog_sticks > AnalogStick - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/AnalogStick | - -**Description:** Control stick offering fine-tuned control beyond the traditional 8 directions of a directional pad -e.g. The Left and Right stick of the Sony Dualsense - -
- - 2.1.1.1. [Required] Property Controller > functions > analog_sticks > Analog Stick > name - - -
- -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -
-
- -
- - 2.1.1.2. [Required] Property Controller > functions > analog_sticks > Analog Stick > has_button - - -
- -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -
-
- -
-
- -
- - 2.2. [Required] Property Controller > functions > digital_sticks - - -
- -| | | -| ------------ | --------------- | -| **Type** | `array or null` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ----------------------------------------------- | ---------------------------------------------------------------------- | -| [DigitalStick](#functions_digital_sticks_items) | Control stick only capable of transmitting up to 8 discrete inputs ... | - -#### 2.2.1. Controller > functions > digital_sticks > DigitalStick - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/DigitalStick | - -**Description:** Control stick only capable of transmitting up to 8 discrete inputs -e.g. The stick of a Street Fighter II Arcade Cabinet - -
- - 2.2.1.1. [Required] Property Controller > functions > digital_sticks > Digital Stick > name - - -
- -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -
-
- -
- - 2.2.1.2. [Required] Property Controller > functions > digital_sticks > Digital Stick > has_button - - -
- -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -
-
- -
-
- -
- - 2.3. [Required] Property Controller > functions > action_buttons - - -
- -| | | -| ------------ | --------------- | -| **Type** | `array or null` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | -| [ActionButton](#functions_action_buttons_items) | Button traditionally mapped to performing an action in video games (e.g. Jump, Punch, Kick, Interact…) ... | - -#### 2.3.1. Controller > functions > action_buttons > ActionButton - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/ActionButton | - -**Description:** Button traditionally mapped to performing an action in video games (e.g. Jump, Punch, Kick, Interact…) -Can be Analog or Digital -e.g.: A, B, X, Y, LT, LB, RT, RB - -
- - 2.3.1.1. [Required] Property Controller > functions > action_buttons > Action Button > name - - -
- -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -
-
- -
- - 2.3.1.2. [Required] Property Controller > functions > action_buttons > Action Button > analog - - -
- -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -
-
- -
- - 2.3.1.3. [Optional] Property Controller > functions > action_buttons > Action Button > clickable - - -
- -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | No | - -
-
- -
-
- -
- - 2.4. [Required] Property Controller > functions > menu_buttons - - -
- -**Title:** Menu Buttons - -| | | -| ------------ | ------------------------- | -| **Type** | `array of string or null` | -| **Required** | Yes | - -**Description:** Buttons traditionally mapped to open an in-game menu -e.g.: Start, Select - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| --------------------------------------------------- | ----------- | -| [menu_buttons items](#functions_menu_buttons_items) | - | - -#### 2.4.1. Controller > functions > menu_buttons > menu_buttons items - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -
-
- -
- - 2.5. [Required] Property Controller > functions > system_buttons - - -
- -**Title:** System Buttons - -| | | -| ------------ | ------------------------- | -| **Type** | `array of string or null` | -| **Required** | Yes | - -**Description:** Buttons traditionally mapped to open a system menu or perform an OS-level operation -e.g.: Share, Home - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ------------------------------------------------------- | ----------- | -| [system_buttons items](#functions_system_buttons_items) | - | - -#### 2.5.1. Controller > functions > system_buttons > system_buttons items - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -
-
- -
- - 2.6. [Required] Property Controller > functions > other_buttons - - -
- -**Title:** Other Buttons - -| | | -| ------------ | ------------------------- | -| **Type** | `array of string or null` | -| **Required** | Yes | - -**Description:** Buttons which do not perform any software-level or OS-level operation on the console or PC they are connected to, and are not recognized as buttons by the software or OS -e.g.: Power, Sync, Turbo, Profile - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ----------------------------------------------------- | ----------- | -| [other_buttons items](#functions_other_buttons_items) | - | - -#### 2.6.1. Controller > functions > other_buttons > other_buttons items - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -
-
- -
- - 2.7. [Required] Property Controller > functions > trackpads - - -
- -| | | -| ------------ | --------------- | -| **Type** | `array or null` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| -------------------------------------- | ----------------------------------------------------------- | -| [Trackpad](#functions_trackpads_items) | Tactile sensor commonly found on laptops to emulate a mouse | - -#### 2.7.1. Controller > functions > trackpads > Trackpad - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/Trackpad | - -**Description:** Tactile sensor commonly found on laptops to emulate a mouse - -
- - 2.7.1.1. [Required] Property Controller > functions > trackpads > Trackpad > name - - -
- -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -
-
- -
- - 2.7.1.2. [Required] Property Controller > functions > trackpads > Trackpad > clickable - - -
- -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -
-
- -
-
- -
- - 2.8. [Required] Property Controller > functions > touch_screens - - -
- -| | | -| ------------ | --------------- | -| **Type** | `array or null` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| --------------------------------------------- | ----------- | -| [TouchScreen](#functions_touch_screens_items) | - | - -#### 2.8.1. Controller > functions > touch_screens > TouchScreen - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/TouchScreen | - -
- - 2.8.1.1. [Required] Property Controller > functions > touch_screens > Touch Screen > resolution - - -
- -| | | -| ------------ | ------------------ | -| **Type** | `array of integer` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | 2 | -| **Max items** | 2 | -| **Items unicity** | False | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ------------------------------------------------------------------- | ----------- | -| [resolution items](#functions_touch_screens_items_resolution_items) | - | - -##### 2.8.1.1.1. Controller > functions > touch_screens > Touch Screen > resolution > resolution items - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | No | - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | ≥ 0 | - -
-
- -
- - 2.8.1.2. [Required] Property Controller > functions > touch_screens > Touch Screen > type - - -
- -| | | -| ------------ | ------------------ | -| **Type** | `enum (of string)` | -| **Required** | Yes | - -Must be one of: -* "resistive" -* "capacitive" - -
-
- -
-
- -
- - 2.9. [Required] Property Controller > functions > directional_buttons - - -
- -| | | -| ------------ | --------------- | -| **Type** | `array or null` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -| [DirectionalButton](#functions_directional_buttons_items) | Set of Individual Buttons which, together, can transmit direction-based inputs to a game similar to a Digital Stick | - -#### 2.9.1. Controller > functions > directional_buttons > DirectionalButton - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/DirectionalButton | - -**Description:** Set of Individual Buttons which, together, can transmit direction-based inputs to a game similar to a Digital Stick - -
- - 2.9.1.1. [Required] Property Controller > functions > directional_buttons > Directional Button Set > set - - -
- -| | | -| ------------ | ----------------- | -| **Type** | `array of string` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ----------------------------------------------------------- | ----------- | -| [set items](#functions_directional_buttons_items_set_items) | - | - -##### 2.9.1.1.1. Controller > functions > directional_buttons > Directional Button Set > set > set items - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | - -
-
- -
- - 2.9.1.2. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention - - -
- -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | Yes | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/SocdPrevention | - -**Description:** Hardware or software-based solutions which may prevent sending two Simultaneously Opposite Cardinal Direction inputs to the console or PC - -
- - 2.9.1.2.1. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention > hardware - - -
- -**Title:** Hardware SOCD Prevention - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not there is a hardware-based solution which may physically prevent two Simultaneously Opposite Cardinal Direction to be pressed at the same time, e.g. a D-Pad’s pivot - -
-
- -
- - 2.9.1.2.2. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software - - -
- -| | | -| -------------- | -------------------------- | -| **Type** | `object or null` | -| **Required** | Yes | -| **Defined in** | #/definitions/SoftwareSOCD | - -**Description:** List of software-based solutions offered by the controller’s firmware which may prevent sending two Simultaneously Opposite Cardinal Direction inputs to the console or PC, if any -- neutral: Pressing Left+Right or Up+Down cancels the input and sends a Neutral position to the console or PC -- last_input: Pressing Left+Right or Up+Down sends the last pressed direction to the console or PC -- first_input: Pressing Left+Right or Up+Down will ignore the new direction being sent and sends the first pressed direction to the console or PC -- up: (Only for Up+Down) Pressing Up+Down always sends Up to to the console or PC -- disable: Software SOCD Prevention can be disabled, leading to both Left & Right inputs or Up & Down inputs being sent to the console or PC - -
- - 2.9.1.2.2.1. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software > left_right - - -
- -| | | -| ------------ | --------------------------- | -| **Type** | `array of enum (of string)` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| -------------------------------------------------------------------------------------------------- | ----------- | -| [left_right items](#functions_directional_buttons_items_socd_prevention_software_left_right_items) | - | - -##### 2.9.1.2.2.1.1. Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software > left_right > left_right items - -| | | -| ------------ | ------------------ | -| **Type** | `enum (of string)` | -| **Required** | No | - -Must be one of: -* "neutral" -* "last_input" -* "disable" - -
-
- -
- - 2.9.1.2.2.2. [Required] Property Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software > up_down - - -
- -| | | -| ------------ | --------------------------- | -| **Type** | `array of enum (of string)` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| -------------------------------------------------------------------------------------------- | ----------- | -| [up_down items](#functions_directional_buttons_items_socd_prevention_software_up_down_items) | - | - -##### 2.9.1.2.2.2.1. Controller > functions > directional_buttons > Directional Button Set > socd_prevention > software > up_down > up_down items - -| | | -| ------------ | ------------------ | -| **Type** | `enum (of string)` | -| **Required** | No | - -Must be one of: -* "neutral" -* "last_input" -* "first_input" -* "disable" -* "up" - -
-
- -
-
- -
-
- -
-
- -
- - 2.10. [Required] Property Controller > functions > gyroscope - - -
- -**Title:** Gyroscope - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller has an integrated gyroscope - -
-
- -
- - 2.11. [Required] Property Controller > functions > accelerometer - - -
- -**Title:** Accelerometer - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller has an integrated accelerometer - -
-
- -
- - 2.12. [Required] Property Controller > functions > macro - - -
- -**Title:** Macro - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Indicates if the buttons of the controller can be mapped to perform a sequence of and/or simultaneous standard button presses automatically -Not to be confused with Turbo -Includes the simultaneous pressing of directional buttons - -
-
- -
- - 2.13. [Required] Property Controller > functions > turbo - - -
- -**Title:** Turbo - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Indicates if the buttons of the controller can be mapped to simulate the frequent and periodic pressing and unpressing of said button when held -Not to be confued with Macro - -
-
- -
- - 2.14. [Required] Property Controller > functions > ir_reciever - - -
- -**Title:** Infrared Receiver - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller has an integrated Infrared Receiver - -
-
- -
- - 2.15. [Required] Property Controller > functions > extension_ports - - -
- -**Title:** Extension Ports - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | Yes | - -**Description:** Number of additional data ports present on the controller, excluding any cable port used for connecting or charging the device, or the Headset Port - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | ≥ 0 | - -
-
- -
- - 2.16. [Required] Property Controller > functions > headset_port - - -
- -**Title:** Headset Port - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller has an integrated Jack headphone port - -
-
- -
- - 2.17. [Required] Property Controller > functions > speaker - - -
- -**Title:** Speaker - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller has an integrated speaker - -
-
- -
- - 2.18. [Required] Property Controller > functions > microphone - - -
- -**Title:** Microphone - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller has an integrated microphone - -
-
- -
- - 2.19. [Required] Property Controller > functions > cable - - -
- -| | | -| -------------- | ------------------- | -| **Type** | `object or null` | -| **Required** | Yes | -| **Defined in** | #/definitions/Cable | - -**Description:** Cable or cable port allowing for a connection between a console or PC and the controller - -
- - 2.19.1. [Required] Property Controller > functions > cable > interface - - -
- -| | | -| ------------ | ------------------ | -| **Type** | `enum (of string)` | -| **Required** | Yes | - -Must be one of: -* "USB-A" -* "USB-C" -* "Mini USB-A" -* "Micro USB-A" -* "GameCube Controller Port" - -
-
- -
- - 2.19.2. [Required] Property Controller > functions > cable > removable - - -
- -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -
-
- -
-
- -
- - 2.20. [Required] Property Controller > functions > bluetooth - - -
- -**Title:** Bluetooth - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller is capable to connect wirerlessly to a device via Bluetooth - -
-
- -
- - 2.21. [Required] Property Controller > functions > 2_4ghz - - -
- -**Title:** 2.4GHz - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller is capable to connect wirerlessly to a device via a 2.4GHz connection, including if said connection requires an additional dongle provided with the controller - -
-
- -
- - 2.22. [Required] Property Controller > functions > rumble - - -
- -**Title:** Rumble - -| | | -| ------------ | -------------------------- | -| **Type** | `enum (of null or string)` | -| **Required** | Yes | - -**Description:** Type of rumble functionnality offered by the controller, if it applies. -- standard: Refers to traditional rumble motors found in the Nintendo GameCube controller for instance -- enhanced: Refers to any kind of haptic feedback implemented other than the former, as seen for instance in the Nintendo Switch Joy-Con or the Sony Dualsense - -Must be one of: -* "enhanced" -* "standard" -* null - -
-
- -
- - 2.23. [Required] Property Controller > functions > digital_to_analog_conversion - - -
- -| | | -| ------------ | --------------- | -| **Type** | `array or null` | -| **Required** | Yes | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | -| [DigitalToAnalogConversion](#functions_digital_to_analog_conversion_items) | Digital-to-analog conversion capabilities the controller may be able to perform ... | - -#### 2.23.1. Controller > functions > digital_to_analog_conversion > DigitalToAnalogConversion - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/DigitalToAnalogConversion | - -**Description:** Digital-to-analog conversion capabilities the controller may be able to perform -- 8_way: The device is only capable of emulating the 8 extreme cardinal inputs for said analog stick -- button: The device is only capable of emulating the full press of said button -- precision: The exact output of said button or analog stick axis can be controlled and fine-tuned either via hard mapping in the controller’s firmware, or using modifier buttons - -
- - 2.23.1.1. [Required] Property Controller > functions > digital_to_analog_conversion > Digital-to-Analog Conversion > emulated_analog - - -
- -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -
-
- -
- - 2.23.1.2. [Required] Property Controller > functions > digital_to_analog_conversion > Digital-to-Analog Conversion > type - - -
- -| | | -| ------------ | ------------------ | -| **Type** | `enum (of string)` | -| **Required** | Yes | - -Must be one of: -* "8_way" -* "precision" -* "button" - -
-
- -
- - 2.23.1.3. [Required] Property Controller > functions > digital_to_analog_conversion > Digital-to-Analog Conversion > modifier_buttons - - -
- -**Title:** Modifier Button - -| | | -| ------------ | --------- | -| **Type** | `integer` | -| **Required** | Yes | - -**Description:** Number of modifier buttons whose sole purpose is to change the value of the analog output value of a button press or analog stick axis - -| Restrictions | | -| ------------ | ------ | -| **Minimum** | ≥ 0 | - -
-
- -
-
- -
- - 2.24. [Required] Property Controller > functions > pc_xinput - - -
- -**Title:** XInput compatibility - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller can be recognized by Windows and Windows games as an XInput controller with no additional drivers or adapters, and as such behave as an Xbox 360 controller would - -
-
- -
- - 2.25. [Required] Property Controller > functions > pc_steaminput - - -
- -**Title:** Steam Input compatibility - -| | | -| ------------ | --------- | -| **Type** | `boolean` | -| **Required** | Yes | - -**Description:** Whether or not the controller can be recognized by Steam on Windows and Linux with no additional drivers or adapters, and translate the controller inputs to XInput via Steam Input - -
-
- -
- - 2.26. [Required] Property Controller > functions > native_consoles - - -
- -**Title:** Native Consoles - -| | | -| ------------ | ----------------------------------- | -| **Type** | `array of enum (of string) or null` | -| **Required** | Yes | - -**Description:** Lists the consoles on which the controller can be used without the use of an adapter, for most games. -In the case of the PS5, applies if the controller is recognized by the PS4 compatibility layer implemented in Street Fighter 6 and other fighting games as well. - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| --------------------------------------------------------- | ----------- | -| [native_consoles items](#functions_native_consoles_items) | - | - -#### 2.26.1. Controller > functions > native_consoles > native_consoles items - -| | | -| ------------ | ------------------ | -| **Type** | `enum (of string)` | -| **Required** | No | - -Must be one of: -* "ps1" -* "ps2" -* "ps3" -* "ps4" -* "ps5" -* "nsw" -* "wiiu" -* "wii" -* "ngc" -* "n64" -* "snes" -* "nes" -* "xbox" -* "xb360" -* "xb1" -* "xbs" -* "smd" -* "saturn" -* "dc" - -
-
- -
-
- -
- - 3. [Optional] Property Controller > source - - -
- -**Title:** Source - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | No | -| **Format** | `uri` | - -**Description:** Main source for information on the controller specifications -Ideally either a link to a manual on the Internet Archive or to an archived webpage on the Wayback Machine - -| Restrictions | | -| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Must match regular expression** | ```https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)``` [Test](https://regex101.com/?regex=https%3F%3A%5C%2F%5C%2F%28www%5C.%29%3F%5B-a-zA-Z0-9%40%3A%25._%5C%2B~%23%3D%5D%7B1%2C256%7D%5C.%5Ba-zA-Z0-9%28%29%5D%7B1%2C6%7D%5Cb%28%5B-a-zA-Z0-9%28%29%40%3A%25_%5C%2B.~%23%3F%26%2F%2F%3D%5D%2A%29) | - -
-
- -
- - 4. [Optional] Property Controller > variants - - -
- -| | | -| ------------ | ------- | -| **Type** | `array` | -| **Required** | No | - -| | Array restrictions | -| -------------------- | ------------------ | -| **Min items** | N/A | -| **Max items** | N/A | -| **Items unicity** | True | -| **Additional items** | False | -| **Tuple validation** | See below | - -| Each item of this array must be | Description | -| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Variant](#variants_items) | A different way to use the controller than the one seen on the base image.png file, usually through the use of additional accessories which may attach to the controller ... | - -### 4.1. Controller > variants > Variant - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/Variant | - -**Description:** A different way to use the controller than the one seen on the base image.png file, usually through the use of additional accessories which may attach to the controller -May be omitted if the controller only has one variant -Note: Must include a name for the base variant - -
- - 4.1.1. [Required] Property Controller > variants > Variant > name - - -
- -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -
-
- -
- - 4.1.2. [Required] Property Controller > variants > Variant > image - - -
- -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -
-
- -
-
- ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2024-03-16 at 11:32:33 +0000 \ No newline at end of file diff --git a/_docs/manufacturer.md b/_docs/manufacturer.md deleted file mode 100644 index 2f79837..0000000 --- a/_docs/manufacturer.md +++ /dev/null @@ -1,34 +0,0 @@ -# Schema Docs - -- [1. [Required] Property Manufacturer > name](#name) - -| | | -| ------------------------- | ------------------------------------------------------- | -| **Type** | `object` | -| **Required** | No | -| **Additional properties** | [[Not allowed]](# "Additional Properties not allowed.") | -| **Defined in** | #/definitions/ManufacturerDefinition | - -**Description:** Groups controllers which have the same manufacturer in a given category - -
- - 1. [Required] Property Manufacturer > name - - -
- -**Title:** Name - -| | | -| ------------ | -------- | -| **Type** | `string` | -| **Required** | Yes | - -**Description:** Name of the manufacturer - -
-
- ----------------------------------------------------------------------------------------------------------------------------- -Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2024-03-16 at 11:32:33 +0000 \ No newline at end of file diff --git a/console/nintendo/2ds/config.json b/console/nintendo/2ds/config.json new file mode 100644 index 0000000..5e62d2a --- /dev/null +++ b/console/nintendo/2ds/config.json @@ -0,0 +1,90 @@ +{ + "name": "Nintendo 2DS", + "functions": { + "analog_sticks": [ + { + "name": "Circle Pad", + "has_button": false + } + ], + "digital_sticks": null, + "action_buttons": [ + { + "name": "A", + "analog": false + }, + { + "name": "B", + "analog": false + }, + { + "name": "X", + "analog": false + }, + { + "name": "Y", + "analog": false + }, + { + "name": "L", + "analog": false + }, + { + "name": "R", + "analog": false + } + ], + "menu_buttons": [ + "Start", + "Select" + ], + "system_buttons": [ + "Home" + ], + "other_buttons": [ + "Power", + "Volume Slider" + ], + "trackpads": null, + "touch_screens": [ + { + "resolution": [ + 320, + 240 + ], + "type": "resistive" + } + ], + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + } + ], + "gyroscope": true, + "accelerometer": true, + "ir_reciever": true, + "extension_ports": 0, + "headset_port": true, + "speaker": true, + "microphone": true, + "cable": null, + "bluetooth": false, + "2_4ghz": false, + "rumble": null, + "digital_to_analog_conversion": null, + "pc_xinput": false, + "pc_steaminput": false, + "native_consoles": null, + "macro": false, + "turbo": false + } +} \ No newline at end of file diff --git a/console/nintendo/3ds/2ds.png b/console/nintendo/2ds/image.png similarity index 100% rename from console/nintendo/3ds/2ds.png rename to console/nintendo/2ds/image.png diff --git a/console/nintendo/2ds_ll/config.json b/console/nintendo/2ds_ll/config.json new file mode 100644 index 0000000..fe2ddb3 --- /dev/null +++ b/console/nintendo/2ds_ll/config.json @@ -0,0 +1,97 @@ +{ + "name": "New Nintendo 2DS XL", + "functions": { + "analog_sticks": [ + { + "name": "Circle Pad", + "has_button": false + }, + { + "name": "C-Stick", + "has_button": false + } + ], + "digital_sticks": null, + "action_buttons": [ + { + "name": "A", + "analog": false + }, + { + "name": "B", + "analog": false + }, + { + "name": "X", + "analog": false + }, + { + "name": "Y", + "analog": false + }, + { + "name": "L", + "analog": false + }, + { + "name": "R", + "analog": false + }, + { + "name": "ZL", + "analog": false + }, + { + "name": "ZR", + "analog": false + } + ], + "menu_buttons": [ + "Start", + "Select" + ], + "system_buttons": [ + "Home" + ], + "other_buttons": [ + "Power", "Volume Slider" + ], + "trackpads": null, + "touch_screens": [{ + "resolution": [320,240], + "type": "resistive" + }], + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + } + ], + "gyroscope": true, + "accelerometer": true, + "ir_reciever": true, + "extension_ports": 0, + "headset_port": true, + "speaker": true, + "microphone": true, + "cable": null, + "bluetooth": false, + "2_4ghz": false, + "rumble": null, + "digital_to_analog_conversion": null, + "pc_xinput": false, + "pc_steaminput": false, + "native_consoles": null, + "macro": false, + "turbo": false + }, + "source": "https://fs-prod-cdn.nintendo-europe.com/media/downloads/support_1/new_nintendo_3ds/NewNintendo2DSXL_OperationsManual_UKV.pdf" +} \ No newline at end of file diff --git a/console/nintendo/3ds/2ds_ll.png b/console/nintendo/2ds_ll/image.png similarity index 100% rename from console/nintendo/3ds/2ds_ll.png rename to console/nintendo/2ds_ll/image.png diff --git a/console/nintendo/3ds/circlepro.png b/console/nintendo/3ds/circlepro.png new file mode 100644 index 0000000..bc1343f Binary files /dev/null and b/console/nintendo/3ds/circlepro.png differ diff --git a/console/nintendo/3ds/config.json b/console/nintendo/3ds/config.json index 54ff4ca..5a855df 100644 --- a/console/nintendo/3ds/config.json +++ b/console/nintendo/3ds/config.json @@ -42,13 +42,20 @@ "Home" ], "other_buttons": [ - "Power", "3D Slider", "Wireless Switch" + "Power", + "3D Slider", + "Wireless Switch" ], "trackpads": null, - "touch_screens": [{ - "resolution": [320,240], - "type": "resistive" - }], + "touch_screens": [ + { + "resolution": [ + 320, + 240 + ], + "type": "resistive" + } + ], "directional_buttons": [ { "set": [ @@ -87,24 +94,8 @@ "image": "image.png" }, { - "name": "Nintendo 3DS XL", - "image": "ll.png" - }, - { - "name": "Nintendo 2DS", - "image": "2ds.png" - }, - { - "name": "New Nintendo 3DS", - "image": "new.png" - }, - { - "name": "New Nintendo 3DS XL", - "image": "new_ll.png" - }, - { - "name": "New Nintendo 2DS XL", - "image": "2ds_ll.png" + "name": "Circle Pad Pro", + "image": "circlepro.png" } ] } \ No newline at end of file diff --git a/console/nintendo/3ds_ll/circlepro.png b/console/nintendo/3ds_ll/circlepro.png new file mode 100644 index 0000000..9fa6dd6 Binary files /dev/null and b/console/nintendo/3ds_ll/circlepro.png differ diff --git a/console/nintendo/3ds_ll/config.json b/console/nintendo/3ds_ll/config.json new file mode 100644 index 0000000..497daac --- /dev/null +++ b/console/nintendo/3ds_ll/config.json @@ -0,0 +1,94 @@ +{ + "name": "Nintendo 3DS XL", + "functions": { + "analog_sticks": [ + { + "name": "Circle Pad", + "has_button": false + } + ], + "digital_sticks": null, + "action_buttons": [ + { + "name": "A", + "analog": false + }, + { + "name": "B", + "analog": false + }, + { + "name": "X", + "analog": false + }, + { + "name": "Y", + "analog": false + }, + { + "name": "L", + "analog": false + }, + { + "name": "R", + "analog": false + } + ], + "menu_buttons": [ + "Start", + "Select" + ], + "system_buttons": [ + "Home" + ], + "other_buttons": [ + "Power", "3D Slider", "Wireless Switch" + ], + "trackpads": null, + "touch_screens": [{ + "resolution": [320,240], + "type": "resistive" + }], + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + } + ], + "gyroscope": true, + "accelerometer": true, + "ir_reciever": true, + "extension_ports": 0, + "headset_port": true, + "speaker": true, + "microphone": true, + "cable": null, + "bluetooth": false, + "2_4ghz": false, + "rumble": null, + "digital_to_analog_conversion": null, + "pc_xinput": false, + "pc_steaminput": false, + "native_consoles": null, + "macro": false, + "turbo": false + }, + "variants": [ + { + "name": "Nintendo 3DS XL", + "image": "image.png" + }, + { + "name": "Circle Pad Pro XL", + "image": "circlepro.png" + } + ] +} \ No newline at end of file diff --git a/console/nintendo/3ds/ll.png b/console/nintendo/3ds_ll/image.png similarity index 100% rename from console/nintendo/3ds/ll.png rename to console/nintendo/3ds_ll/image.png diff --git a/console/nintendo/3ds_new/config.json b/console/nintendo/3ds_new/config.json new file mode 100644 index 0000000..f1067ae --- /dev/null +++ b/console/nintendo/3ds_new/config.json @@ -0,0 +1,104 @@ +{ + "name": "New Nintendo 3DS", + "functions": { + "analog_sticks": [ + { + "name": "Circle Pad", + "has_button": false + }, + { + "name": "C-Stick", + "has_button": false + } + ], + "digital_sticks": null, + "action_buttons": [ + { + "name": "A", + "analog": false + }, + { + "name": "B", + "analog": false + }, + { + "name": "X", + "analog": false + }, + { + "name": "Y", + "analog": false + }, + { + "name": "L", + "analog": false + }, + { + "name": "R", + "analog": false + }, + { + "name": "ZL", + "analog": false + }, + { + "name": "ZR", + "analog": false + } + ], + "menu_buttons": [ + "Start", + "Select" + ], + "system_buttons": [ + "Home" + ], + "other_buttons": [ + "Power", + "3D Slider", + "Volume Slider" + ], + "trackpads": null, + "touch_screens": [ + { + "resolution": [ + 320, + 240 + ], + "type": "resistive" + } + ], + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + } + ], + "gyroscope": true, + "accelerometer": true, + "ir_reciever": true, + "extension_ports": 0, + "headset_port": true, + "speaker": true, + "microphone": true, + "cable": null, + "bluetooth": false, + "2_4ghz": false, + "rumble": null, + "digital_to_analog_conversion": null, + "pc_xinput": false, + "pc_steaminput": false, + "native_consoles": null, + "macro": false, + "turbo": false + }, + "source": "https://fs-prod-cdn.nintendo-europe.com/media/downloads/support_1/new_nintendo_3ds/NewNintendo3DS_NewNintendo3DSXL_OperationsManual_UKV.pdf" +} \ No newline at end of file diff --git a/console/nintendo/3ds/new.png b/console/nintendo/3ds_new/image.png similarity index 100% rename from console/nintendo/3ds/new.png rename to console/nintendo/3ds_new/image.png diff --git a/console/nintendo/3ds_newll/config.json b/console/nintendo/3ds_newll/config.json new file mode 100644 index 0000000..75dbd81 --- /dev/null +++ b/console/nintendo/3ds_newll/config.json @@ -0,0 +1,104 @@ +{ + "name": "New Nintendo 3DS XL", + "functions": { + "analog_sticks": [ + { + "name": "Circle Pad", + "has_button": false + }, + { + "name": "C-Stick", + "has_button": false + } + ], + "digital_sticks": null, + "action_buttons": [ + { + "name": "A", + "analog": false + }, + { + "name": "B", + "analog": false + }, + { + "name": "X", + "analog": false + }, + { + "name": "Y", + "analog": false + }, + { + "name": "L", + "analog": false + }, + { + "name": "R", + "analog": false + }, + { + "name": "ZL", + "analog": false + }, + { + "name": "ZR", + "analog": false + } + ], + "menu_buttons": [ + "Start", + "Select" + ], + "system_buttons": [ + "Home" + ], + "other_buttons": [ + "Power", + "3D Slider", + "Volume Slider" + ], + "trackpads": null, + "touch_screens": [ + { + "resolution": [ + 320, + 240 + ], + "type": "resistive" + } + ], + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + } + ], + "gyroscope": true, + "accelerometer": true, + "ir_reciever": true, + "extension_ports": 0, + "headset_port": true, + "speaker": true, + "microphone": true, + "cable": null, + "bluetooth": false, + "2_4ghz": false, + "rumble": null, + "digital_to_analog_conversion": null, + "pc_xinput": false, + "pc_steaminput": false, + "native_consoles": null, + "macro": false, + "turbo": false + }, + "source": "https://fs-prod-cdn.nintendo-europe.com/media/downloads/support_1/new_nintendo_3ds/NewNintendo3DS_NewNintendo3DSXL_OperationsManual_UKV.pdf" +} \ No newline at end of file diff --git a/console/nintendo/3ds/new_ll.png b/console/nintendo/3ds_newll/image.png similarity index 100% rename from console/nintendo/3ds/new_ll.png rename to console/nintendo/3ds_newll/image.png diff --git a/leverless/keybox/fusion/config.json b/leverless/keybox/fusion/config.json index 6a76632..cd5c2d2 100644 --- a/leverless/keybox/fusion/config.json +++ b/leverless/keybox/fusion/config.json @@ -121,15 +121,5 @@ "native_consoles": ["ps4", "ps5", "nsw", "ps3"], "macro": false, "turbo": false - }, - "variants": [ - { - "name": "Regular Layout", - "image": "image.png" - }, - { - "name": "Mirrored", - "image": "mirror.png" - } - ] + } } \ No newline at end of file diff --git a/leverless/keybox/fusion/image.png b/leverless/keybox/fusion/image.png index fcc66f8..0da9c6e 100644 Binary files a/leverless/keybox/fusion/image.png and b/leverless/keybox/fusion/image.png differ diff --git a/leverless/keybox/fusion/mirror.png b/leverless/keybox/fusion/mirror.png deleted file mode 100644 index 4aa808a..0000000 Binary files a/leverless/keybox/fusion/mirror.png and /dev/null differ diff --git a/leverless/keybox/fusion_mirrored/config.json b/leverless/keybox/fusion_mirrored/config.json new file mode 100644 index 0000000..546b7f8 --- /dev/null +++ b/leverless/keybox/fusion_mirrored/config.json @@ -0,0 +1,125 @@ +{ + "name": "Keybox Fusion (Mirrored)", + "functions": { + "analog_sticks": null, + "digital_sticks": null, + "action_buttons": [ + { + "name": "Triangle", + "analog": false + }, + { + "name": "Circle", + "analog": false + }, + { + "name": "Square", + "analog": false + }, + { + "name": "Cross", + "analog": false + }, + { + "name": "L1", + "analog": false + }, + { + "name": "R1", + "analog": false + }, + { + "name": "L2", + "analog": false + }, + { + "name": "R2", + "analog": false + }, + { + "name": "L3", + "analog": false + }, + { + "name": "R3", + "analog": false + } + ], + "menu_buttons": [ + "Options" + ], + "system_buttons": [ + "Share" + ], + "other_buttons": null, + "trackpads": null, + "touch_screens": null, + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": false, + "software": { + "left_right": [ + "neutral", + "last_input", + "disable" + ], + "up_down": [ + "neutral", + "up", + "last_input", + "disable" + ] + } + } + } + ], + "gyroscope": false, + "accelerometer": false, + "ir_reciever": false, + "extension_ports": 0, + "headset_port": false, + "speaker": false, + "microphone": false, + "cable": { + "interface": "USB-C", + "removable": true + }, + "bluetooth": false, + "2_4ghz": false, + "rumble": null, + "digital_to_analog_conversion": [ + { + "emulated_analog": "Left Stick", + "type": "8_way", + "modifier_buttons": 0 + }, + { + "emulated_analog": "Right Stick", + "type": "8_way", + "modifier_buttons": 0 + }, + { + "emulated_analog": "L2", + "type": "button", + "modifier_buttons": 0 + }, + { + "emulated_analog": "R2", + "type": "button", + "modifier_buttons": 0 + } + ], + "pc_xinput": false, + "pc_steaminput": true, + "native_consoles": ["ps4", "ps5", "nsw", "ps3"], + "macro": false, + "turbo": false + } +} \ No newline at end of file diff --git a/leverless/keybox/fusion_mirrored/image.png b/leverless/keybox/fusion_mirrored/image.png new file mode 100644 index 0000000..fab5608 Binary files /dev/null and b/leverless/keybox/fusion_mirrored/image.png differ diff --git a/leverless/keybox/impact/config.json b/leverless/keybox/impact/config.json new file mode 100644 index 0000000..a88e61c --- /dev/null +++ b/leverless/keybox/impact/config.json @@ -0,0 +1,125 @@ +{ + "name": "Keybox Impact", + "functions": { + "analog_sticks": null, + "digital_sticks": null, + "action_buttons": [ + { + "name": "Triangle", + "analog": false + }, + { + "name": "Circle", + "analog": false + }, + { + "name": "Square", + "analog": false + }, + { + "name": "Cross", + "analog": false + }, + { + "name": "L1", + "analog": false + }, + { + "name": "R1", + "analog": false + }, + { + "name": "L2", + "analog": false + }, + { + "name": "R2", + "analog": false + }, + { + "name": "L3", + "analog": false + }, + { + "name": "R3", + "analog": false + } + ], + "menu_buttons": [ + "Options" + ], + "system_buttons": [ + "Share" + ], + "other_buttons": null, + "trackpads": null, + "touch_screens": null, + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": false, + "software": { + "left_right": [ + "neutral", + "last_input", + "disable" + ], + "up_down": [ + "neutral", + "up", + "last_input", + "disable" + ] + } + } + } + ], + "gyroscope": false, + "accelerometer": false, + "ir_reciever": false, + "extension_ports": 0, + "headset_port": false, + "speaker": false, + "microphone": false, + "cable": { + "interface": "USB-C", + "removable": true + }, + "bluetooth": false, + "2_4ghz": false, + "rumble": null, + "digital_to_analog_conversion": [ + { + "emulated_analog": "Left Stick", + "type": "8_way", + "modifier_buttons": 0 + }, + { + "emulated_analog": "Right Stick", + "type": "8_way", + "modifier_buttons": 0 + }, + { + "emulated_analog": "L2", + "type": "button", + "modifier_buttons": 0 + }, + { + "emulated_analog": "R2", + "type": "button", + "modifier_buttons": 0 + } + ], + "pc_xinput": false, + "pc_steaminput": true, + "native_consoles": ["ps4", "ps5", "nsw", "ps3"], + "macro": false, + "turbo": false + } +} \ No newline at end of file diff --git a/leverless/keybox/impact/image.png b/leverless/keybox/impact/image.png new file mode 100644 index 0000000..447a113 Binary files /dev/null and b/leverless/keybox/impact/image.png differ diff --git a/pad/8bitdo/config.json b/pad/8bitdo/config.json new file mode 100644 index 0000000..0f5a07e --- /dev/null +++ b/pad/8bitdo/config.json @@ -0,0 +1,3 @@ +{ + "name": "8BitDo" +} \ No newline at end of file diff --git a/pad/8bitdo/lite/config.json b/pad/8bitdo/lite/config.json new file mode 100644 index 0000000..b8b2644 --- /dev/null +++ b/pad/8bitdo/lite/config.json @@ -0,0 +1,135 @@ +{ + "name": "8BitDo Lite", + "functions": { + "analog_sticks": null, + "digital_sticks": null, + "action_buttons": [ + { + "name": "A", + "analog": false + }, + { + "name": "B", + "analog": false + }, + { + "name": "X", + "analog": false + }, + { + "name": "Y", + "analog": false + }, + { + "name": "L", + "analog": false + }, + { + "name": "R", + "analog": false + }, + { + "name": "L2", + "analog": false + }, + { + "name": "R2", + "analog": false + }, + { + "name": "L3", + "analog": false + }, + { + "name": "R3", + "analog": false + } + ], + "menu_buttons": [ + "-", + "+" + ], + "system_buttons": [ + "Star", + "Home" + ], + "other_buttons": [ + "Sync", + "Mode Switch" + ], + "trackpads": null, + "touch_screens": null, + "directional_buttons": [ + { + "set": [ + "Left Stick Up", + "Left Stick Down", + "Left Stick Left", + "Left Stick Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + }, + { + "set": [ + "Right Stick Up", + "Right Stick Down", + "Right Stick Left", + "Right Stick Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + }, + { + "set": [ + "D-Pad Up", + "D-Pad Down", + "D-Pad Left", + "D-Pad Right" + ], + "socd_prevention": { + "hardware": false, + "software": null + } + } + ], + "gyroscope": false, + "accelerometer": false, + "ir_reciever": false, + "extension_ports": 0, + "headset_port": false, + "speaker": false, + "microphone": false, + "cable": { + "interface": "USB-C", + "removable": true + }, + "bluetooth": true, + "2_4ghz": false, + "rumble": null, + "digital_to_analog_conversion": [ + { + "emulated_analog": "Left Stick", + "type": "8_way", + "modifier_buttons": 0 + }, + { + "emulated_analog": "Right Stick", + "type": "8_way", + "modifier_buttons": 0 + } + ], + "pc_xinput": true, + "pc_steaminput": true, + "native_consoles": [ + "nsw" + ], + "macro": false, + "turbo": true + }, + "source": "https://download.8bitdo.com/Manual/Controller/Lite/Lite_Manual.pdf" +} diff --git a/pad/8bitdo/lite/image.png b/pad/8bitdo/lite/image.png new file mode 100644 index 0000000..d33f14f Binary files /dev/null and b/pad/8bitdo/lite/image.png differ diff --git a/pad/handheldlegend/config.json b/pad/handheldlegend/config.json new file mode 100644 index 0000000..ba80016 --- /dev/null +++ b/pad/handheldlegend/config.json @@ -0,0 +1,3 @@ +{ + "name": "Hand Held Legend" +} \ No newline at end of file diff --git a/pad/handheldlegend/progcc/config.json b/pad/handheldlegend/progcc/config.json new file mode 100644 index 0000000..788c158 --- /dev/null +++ b/pad/handheldlegend/progcc/config.json @@ -0,0 +1,104 @@ +{ + "name": "ProGCC 3", + "functions": { + "analog_sticks": [ + { + "name": "Left Stick", + "has_button": true + }, + { + "name": "Right Stick", + "has_button": true + } + ], + "digital_sticks": null, + "action_buttons": [ + { + "name": "A", + "analog": false + }, + { + "name": "B", + "analog": false + }, + { + "name": "X", + "analog": false + }, + { + "name": "Y", + "analog": false + }, + { + "name": "L", + "analog": false + }, + { + "name": "R", + "analog": false + }, + { + "name": "ZL", + "analog": false + }, + { + "name": "ZR", + "analog": false + } + ], + "menu_buttons": [ + "-", + "+" + ], + "system_buttons": [ + "Capture", + "Home" + ], + "other_buttons": [ + "Sync" + ], + "trackpads": null, + "touch_screens": null, + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + } + ], + "gyroscope": true, + "accelerometer": true, + "ir_reciever": false, + "extension_ports": 0, + "headset_port": false, + "speaker": false, + "microphone": false, + "cable": { + "interface": "USB-C", + "removable": true + }, + "bluetooth": false, + "2_4ghz": false, + "rumble": "standard", + "digital_to_analog_conversion": null, + "pc_xinput": true, + "pc_steaminput": true, + "native_consoles": [ + "nsw", + "ngc", + "wii", + "n64", + "nes", + "snes" + ], + "macro": false, + "turbo": false + } +} \ No newline at end of file diff --git a/pad/handheldlegend/progcc/image.png b/pad/handheldlegend/progcc/image.png new file mode 100644 index 0000000..a31eeff Binary files /dev/null and b/pad/handheldlegend/progcc/image.png differ diff --git a/pad/hori/pokken/config.json b/pad/hori/pokken/config.json index c62bbc2..e7d6c2a 100644 --- a/pad/hori/pokken/config.json +++ b/pad/hori/pokken/config.json @@ -1,5 +1,5 @@ { - "name": "Pokken Tournament Pro Pad", + "name": "Pokkén Tournament Pro Pad", "functions": { "analog_sticks": null, "digital_sticks": null, diff --git a/pad/nintendo/wiimote/config.json b/pad/nintendo/wiimote/config.json index cbb8b96..915fad3 100644 --- a/pad/nintendo/wiimote/config.json +++ b/pad/nintendo/wiimote/config.json @@ -57,7 +57,7 @@ "cable": null, "bluetooth": true, "2_4ghz": false, - "rumble": "enhanced", + "rumble": "standard", "digital_to_analog_conversion": null, "pc_xinput": false, "pc_steaminput": false, @@ -90,5 +90,6 @@ "name": "Wii Classic Controller Pro", "image": "classicpro.png" } - ] -} \ No newline at end of file + ], + "source": "https://archive.org/details/wii-u-operations-manual" +} diff --git a/pad/nintendo/wiiugamepad/config.json b/pad/nintendo/wiiugamepad/config.json new file mode 100644 index 0000000..c520443 --- /dev/null +++ b/pad/nintendo/wiiugamepad/config.json @@ -0,0 +1,107 @@ +{ + "name": "Wii U Gamepad", + "functions": { + "analog_sticks": [ + { + "name": "Left Stick", + "has_button": true + }, + { + "name": "Right Stick", + "has_button": true + } + ], + "digital_sticks": null, + "action_buttons": [ + { + "name": "A", + "analog": false + }, + { + "name": "B", + "analog": false + }, + { + "name": "X", + "analog": false + }, + { + "name": "Y", + "analog": false + }, + { + "name": "L", + "analog": false + }, + { + "name": "R", + "analog": false + }, + { + "name": "ZL", + "analog": false + }, + { + "name": "ZR", + "analog": false + } + ], + "menu_buttons": [ + "-", + "+" + ], + "system_buttons": [ + "Home" + ], + "other_buttons": [ + "Sync", + "Power", + "TV", + "Volume Slider" + ], + "trackpads": null, + "touch_screens": [ + { + "resolution": [ + 854, + 480 + ], + "type": "resistive" + } + ], + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + } + ], + "gyroscope": true, + "accelerometer": true, + "ir_reciever": false, + "extension_ports": 1, + "headset_port": true, + "speaker": true, + "microphone": true, + "cable": null, + "bluetooth": false, + "2_4ghz": false, + "rumble": "standard", + "digital_to_analog_conversion": null, + "pc_xinput": false, + "pc_steaminput": false, + "native_consoles": [ + "wiiu" + ], + "macro": false, + "turbo": false + }, + "source": "https://archive.org/details/wii-u-operations-manual" +} diff --git a/pad/nintendo/wiiugamepad/image.png b/pad/nintendo/wiiugamepad/image.png new file mode 100644 index 0000000..3479bce Binary files /dev/null and b/pad/nintendo/wiiugamepad/image.png differ diff --git a/pad/nintendo/wiiupro/config.json b/pad/nintendo/wiiupro/config.json new file mode 100644 index 0000000..b03c7c3 --- /dev/null +++ b/pad/nintendo/wiiupro/config.json @@ -0,0 +1,97 @@ +{ + "name": "Wii U Pro Controller", + "functions": { + "analog_sticks": [ + { + "name": "Left Stick", + "has_button": true + }, + { + "name": "Right Stick", + "has_button": true + } + ], + "digital_sticks": null, + "action_buttons": [ + { + "name": "A", + "analog": false + }, + { + "name": "B", + "analog": false + }, + { + "name": "X", + "analog": false + }, + { + "name": "Y", + "analog": false + }, + { + "name": "L", + "analog": false + }, + { + "name": "R", + "analog": false + }, + { + "name": "ZL", + "analog": false + }, + { + "name": "ZR", + "analog": false + } + ], + "menu_buttons": [ + "-", + "+" + ], + "system_buttons": [ + "Home" + ], + "other_buttons": [ + "Sync", + "Power" + ], + "trackpads": null, + "touch_screens": null, + "directional_buttons": [ + { + "set": [ + "Up", + "Down", + "Left", + "Right" + ], + "socd_prevention": { + "hardware": true, + "software": null + } + } + ], + "gyroscope": false, + "accelerometer": false, + "ir_reciever": false, + "extension_ports": 0, + "headset_port": false, + "speaker": false, + "microphone": false, + "cable": null, + "bluetooth": true, + "2_4ghz": false, + "rumble": "standard", + "digital_to_analog_conversion": null, + "pc_xinput": false, + "pc_steaminput": false, + "native_consoles": [ + "wiiu" + ], + "macro": false, + "turbo": false + }, + "source": "https://archive.org/details/wii-u-operations-manual" +} diff --git a/pad/nintendo/wiiupro/image.png b/pad/nintendo/wiiupro/image.png new file mode 100644 index 0000000..2becfdd Binary files /dev/null and b/pad/nintendo/wiiupro/image.png differ