By
Ambar Jimenez
2021-09-03 07:59:16




Did you ever want to learn how to control your XBOX in order to create your own game?  Did you want to use the programming language Golang to do it?  Well, read on to learn what already existing Golang packages and modules are available to accomplish this.

This article is intended to discuss what is out there.  It is not intended to discuss how to exactly use them or how well they work.

Scenario:  You have a gambling online website and you want to see if it is possible to use an XBox, controlled by Golang to enhance you user’s experience or to even create an XBox version of your games.

github.com/gherlein/xbevents


This is just a constants file for XBox events.  The module itself does nothing, but it is required by other modules written by gherlein.

Scenario notes: Any modules that require this module will automatically be included when we install other modules.

github.com/gherlein/xb


This project depends on xbevents (above), and it uses xboxdrv on linux.  Xboxdrv can be downloaded from xboxdrv.gitlab.io Officially, this project has been deprecated.

Scenario notes: Since it is deprecated by the author, most likely we will not be using this module.  But depending on how things go with the other options, using the XBoxdrv may be an option.

github.com/gherlein/goxb_mqtt (reads messages from the controller)


This project uses libusb and implements a native XBox360(tm) controller reader in go. Events are read from the controller and written to an MQTT message broker.

This tool requires that libusb is installed.

Although this can technically run on MacOS and Windows, both have not been officially tested by the author.

Be sure to read the Makefile, because this program is a service and it is not a standard Go build.

This project requires eclipse/paho.mqtt.golang and google/gousb

Scenario notes: This module controls the reading of messages from an XBox Controller.  Would providing the ability for our customers to be able to play online gambling games using XBox controllers enhance the customer’s experience?  Possibly.

github.com/libusb/libusb


This is not a Golang project.  Libusb is written in C, but it is a cross platform library for accessing USB devices from Linux, Windows, macOS, and a few others.

Scenario notes:  Low level library that other modules need.

github.com/eclipse/paho.mqtt.golang


The Eclipse Paho MQTT 3.1/3.11 Go client library.  This code builds a library which enable applications to connect to an MQTT broker to publish messages, and to subscribe to topics and receive published messages.  This library supports a fully asynchronous mode of operation.

This module depends on github.com/gorilla/websocket and golang.org/x/net/proxy.

The point of the goxb_mqtt module is help make using all three of these packages easier and clearer to understand.

Scenario notes: Low level library that other modules need.

github.com/google/gousb


The gousb package is an attempt at wrapping the libusb library into a Go-like binding.

Low level stuff that we may or may not need.

github.com/jheiselman/xbone (wakes an xbox)


Library for controlling an Xbox One.  This library (and associated command) will send a command to an Xbox One over the local network to wake it up.

This library can currently only power on an Xbox One. Further interactions require an authenticated session with the device which hasn't been worked out.

Scenario notes: Unless we are trying to sell rented versions of our online games, for example, a social gambling event fundraiser at a church, would we need to wake up a bunch of Xboxes remotely?  But we would need to port our games to the XBox first.

github.com/bkase/xbox-one-fake-driver (XboxONE "joystick driver" for OSX)


Converts Xbox One controller input into keyboard keystrokes.  So you can use an XBoxOne “Joystick” in replace of a keyboard.

Senario notes:  Using this module would allow a user to use an XBox Joystick to use our online gambling games.

github.com/kylelemons/xbox (test of usb protocols)


This is not really a library.  It is an example of how to use Xbox USB protocols.

Scenario notes: Reference.

github.com/bakapear/stadia2xbox


Emulates an Xbox 360 Controller from a Stadia Controller.

Scenario notes: Stadia is the controller that was written by Google.

github.com/byter11/webvXbox


Use your phone browser to use a virtual xbox controller.

The server written in Go serves the controller layout on port 8080 and establishes a Websocket connection with each client.  Up to 4 devices can connect, for every device a virtual xbox controller is plugged in.

Scenario notes: This modules helps you to use your phone to control the XBox.  If we ported our game to the XBox, providing a way for users to use either a controller or their phone would be beneficial.

github.com/OblivCode/xcloud-presence


A Discord Rich Presence for the Xbox Cloud Gaming website.

Uses Raff's godet Remote client for Chrome DevTools, hugolgst's rich-go discord rich presence implementation and mitchellh's go-ps library.

Scenario notes:  This module has to do with accessing the XBox cloud.

github.com/supershabam/gamepad


Experimental golang abstraction of an xbox gamepad.  This module was written 7 years ago, so it is unknown if it will work with current versions of XBox.

Scenario notes: Technology is too old, so most likely not relevant.

github.com/orsinium-labs/gamepad


Cross-platform Go library to read input from an Xbox 360 controller (or another compatible gamepad).

This module was last updated 2 months ago, so it is a better choice than the one above.

Scenario notes: Another module for controlling the XBox 360 controller.

Summary


If you are looking for one stop shopping for a Golang module to control your XBox, you are not going to find it in the open source market.  There are modules to wake up an XBox. There are modules to read the events from an XBox controller.  There are modules to get an XBox Controller to act like keyboard command keys.  There is even a module to make your phone act like an XBox controller.

But depending on what exactly you want to do, you are going to have to mix and match modules.  Using Golang to control an Xbox or using Golang to read events from an XBox controller is still a new area and will require a lot of patience from any developer that wants to try to use or build on these modules.

If you are interested in learning about embedded programming and you are interested in working with golang programming language, playing with these modules and the XBox would be a good place to start.   XBox controls are visual.  You can easily see the action - reaction that is taking place.







Other Tags
video game, gameplay, price, 60fps, steam


Other Articles Related