¡Bienvenido al proyecto Open Steam Controller!
Este es un proyecto en el que he estado trabajando para deconstruir, documentar, reutilizar y expandir el firmware y el hardware del controlador Steam.
Primero, es importante hablar un poco sobre el controlador Steam (el hardware en el que este proyecto se centra).

El controlador Steam es un controlador de videojuegos lanzado por Valve Corporation el 10 de noviembre de 2015. Esto fue parte de la iniciativa de Valve para brindar a los jugadores de PC la opción de una experiencia de consola (es decir, el jugador de sofá que se sienta frente a un televisor y usa un controlador en lugar de teclado y ratón).

El controlador Steam trató de mantener algunos aspectos familiares para los controladores de videojuegos modernos (es decir, un palo analógico izquierdo, cuatro botones de cara, dos botones de hombro y parachoques) al tiempo que cambia algunas de las normas que esperamos (es decir, reemplazando la almohadilla direccional y la palanca analógica derecha con Trackpads).

Se pueden encontrar detalles adicionales sobre el controlador en la página oficial del producto
Tal vez se pregunte por qué existe este proyecto y por qué he invertido una cantidad no desplegable de mi tiempo y energía en él en los últimos años.
Primero, encontré que el diseño de este controlador es convincente. Tener dos pistas en lugar del D-Pad y el palo analógico derecho es una idea interesante. Los trackpads se pueden configurar para actuar de varias maneras y no solo imitar lo que reemplazaron, sino que también proporcionan nuevos paradigmas de interacción. Además, la idea de usar los hápticos para jugar un pequeño jingle cuando el controlador se inicia o se apaga es un toque ordenado que hizo que el controlador se destaque aún más. Poder personalizar completamente estos jingles era un deseo casi inmediato cuando comencé a usar el controlador.
En segundo lugar, el controlador se dejó bastante accesible. Poder cargar actualizaciones de firmware manualmente hizo que la barrera de entrada para ejecutar el firmware personalizado fuera mucho más bajo. Todavía había un desafío considerable para que funcionara incluso un "Hello World" (es decir, parpadear el LED del botón Steam). Sin embargo, esto no fue tan difícil como me imagino hacer algo similar en un controlador diseñado para ser más resistente al mal genio. Realmente aprecio el hecho de que Valve dejó este hardware tan accesible como lo hicieron y no desaniman a las personas a intentar hackearlo.
En tercer lugar, Ifixit hizo una muy buena desmontación del controlador. Esto me dio una idea de lo que el controlador tenía internamente, sin necesidad de (inicialmente) desarmar mi hardware. Esto señaló muchos periféricos y procesadores ordenados con los que pensé que sería bueno trabajar, especialmente en el contexto de un producto que ya estaba diseñado para un propósito particular.
Ahora que el controlador y algunas de sus capacidades (predeterminadas) se han explicado, podemos comenzar a hablar sobre este proyecto. Es decir, quiero cubrir lo que se ha logrado y lo que espero lograr en el futuro.
Tenga en cuenta que lo siguiente es un poco detallado y narrativo. Hay mucho contenido en este proyecto y este es un intento de desglosar los detalles de una manera que le dará un Lay de la tierra fácil de seguir para las personas nuevas en este esfuerzo. Si usted es un tipo de persona TLDR, consulte la sección de aviso y advertencia a continuación y luego no dude en saltar a la sección de subproyectos para llegar a la carne del esfuerzo. También debe asegurarse de ver los videos de demostración que muestran algunos de los principales logros en acción.
Como se mencionó anteriormente, la intención principal de este proyecto es explorar, deconstruir y ampliar las opciones de configuración y los usos para el controlador Steam. Sin embargo, eso es un poco vago. Así que comencemos con algunos ejemplos. Primero, un objetivo importante de este proyecto era poder escribir firmware personalizado para el procesador principal en el controlador. Esto es lo que abre por la puerta para muchas otras posibilidades en el futuro.
Sin embargo, antes de que pudiera comenzar a escribir firmware, necesitaba más información sobre el controlador. Valve fue lo suficientemente agradable como para dejar la puerta abierta para acceder a la versión binaria de su firmware y la capacidad de actualizar fácilmente el procesador principal. Sin embargo, no proporcionaron esquemas o una lista de componentes o hojas de datos que un ingeniero de software integrado tendría normalmente si se le encarga el proceso de escribir firmware personalizado. Por lo tanto, necesitaba recurrir a la ingeniería inversa. Esto esencialmente se reduce a deconstruir el hardware y el firmware oficial para que pueda entender cómo escribir mi propio firmware. En este punto, el esfuerzo de ingeniería inversa ha seguido su curso, ya que se ha descubierto, documentado y utilizado mucho para otros esfuerzos. Los detalles sobre el esfuerzo de ingeniería inversa se pueden encontrar en el subproyecto de ingeniería inversa.
Ahora que se ha establecido un esfuerzo de ingeniería inversa y he comenzado a recopilar información sobre el hardware, pude comenzar a escribir firmware personalizado. Consulte el subproyecto de firmware para ver el estado actual del software. Principalmente, este es un software de utilidad para permitir que un usuario consulte diferentes periféricos o tome medidas en diferentes estados (ya que parte de esa información debía capturarse y volver a alimentarse en el proceso de ingeniería inversa para mantenerlo en marcha). Sin embargo, eventualmente quedó claro que había suficiente funcionalidad que se capturó aquí que no sería demasiado trabajo adicional hacer que este hardware actúe como un controlador para otras consolas (es decir, el interruptor de Nintendo).
Luego llegamos a lo que originalmente fue la única intención de este proyecto. Es decir, el objetivo de poder tener el control total de las canciones (Jingles) que toca el controlador Steam (a través de los hápticos de pistas) en el encendido y apagado. Debido a algunos descubrimientos a través del esfuerzo de ingeniería inversa, este proyecto permite que Jingles esté completamente personalizado y que estas personalizaciones persistan mientras se ejecutan el firmware oficial de Valve. Para obtener detalles sobre cómo personalizar los Jingles en su controlador, o para obtener más detalles (es decir, cómo se formatean los datos de Jingle y cómo podemos personalizar Jingles sin modificar el firmware oficial) consulte el subproyecto de Jingles.
Finalmente, es importante mencionar que otra intención de este proyecto es que sea un recurso educativo y/o motivacional. Tal vez esté interesado en el controlador de vapor. O tal vez está interesado en escribir software integrado para un dispositivo comercial. De cualquier manera, la esperanza es que este proyecto proporcione información clara y concisa para inspirar y permitir que las personas aprendan y hacen más. Sé que aprendí mucho de este esfuerzo, y si todo eso se puede compartir y ayudar a otros, eso sería genial.
Para obtener un punto de partida en detalles adicionales y los logros y las intenciones futuras de este proyecto, consulte la sección de subproyectos a continuación.
Reconozca que utilizando cualquier parte de este proyecto, lo está haciendo bajo su propio riesgo. Este es un esfuerzo de ingeniería inversa y no hago afirmaciones de tener una comprensión completa del hardware para el que proporciono un firmware personalizado o modificado. Con suerte, las pruebas que realizo antes de publicar mis hallazgos y modificaciones impiden daños a su controlador de vapor o cualquier cosa a las que pueda conectar su controlador de vapor (es decir, el interruptor Nintendo). Sin embargo, no puedo garantizar eso.
También tenga en cuenta que esto se comparte principalmente con fines educativos. Si bien esto puede permitir que un usuario haga cosas como usar el controlador Steam en el Nintendo Switch, reconozca que esto casi definitivamente vendrá con compensaciones en comparación con hardware y firmware oficialmente compatibles. Si desea un controlador de interruptor barato y está de acuerdo con que esté conectado, consulte los que PowerA u Hori hace. Si desea un controlador completamente destacado, considere gastar el dinero extra y obtener un controlador profesional (realmente vale la pena).
Finalmente, tenga en cuenta que digo todo esto con la esperanza de no desalentar a nadie. Por favor, bucee y se ensucie las manos. Solo tenga en cuenta que hay un (con suerte) muy pequeño, pero no cero, posibilidad de que un error pueda conducir a hardware bloqueado o roto.
Esta sección ofrece breves contornos y demostraciones (si corresponde) de los principales esfuerzos de este proyecto. Se pueden encontrar más detalles sobre cada subproject en sus respectivos directorios.
El trabajo en este directorio está orientado a crear una compilación de firmware completamente personalizada para el controlador Steam. Este proyecto se puede configurar para que el controlador actúe como un sistema de desarrollo que permita consultar periféricos y explorar o verificar los comportamientos del sistema. Además, el proyecto se puede configurar para un propósito más práctico, como comportarse como un controlador de interruptor Nintendo con cable.
A continuación se presentan algunos videos que demuestran las diferentes compilaciones de firmware:
Controlador de vapor abierto: Nintendo Switch
Controlador de vapor abierto: tablero de desarrollo
El trabajo en este directorio está orientado a la creación de una forma fácil de usar para personalizar qué Jingles se juega cuando el controlador de vapor se inicia y se apaga.
A continuación se muestra un video que demuestra cómo personalizar los jingles en el controlador Steam:
Controlador de vapor abierto: personalización de Jingle
El trabajo en este directorio se centra en deconstruir el firmware y el hardware del controlador Steam. La comprensión obtenida de esto a menudo es un
Parte significativa de los otros subprojects.
Steam ofrece la capacidad de cambiar ciertas opciones de configuración para un controlador Steam (es decir, cambiar el brillo del LED, cambiar qué jingle se reproducirá desde la memoria del sistema). Este directorio contiene trabajo para comprender, reproducir y, tal vez, ampliando esta funcionalidad.
Este es un proyecto de código abierto, así que haga uso de esto, sin embargo, desee (siempre que no viole ninguna licencia establecida en su interior).
Si desea ofrecer contribuciones a este repositorio, sería genial. Eso podría venir en forma de problemas/discusiones sobre cómo esto podría ser más fácil de usar o agregando características o soporte que aún no está allí.
Tenga en cuenta que hay documentos TODO para cada subproyecto. La idea es describir los objetivos que me gustaría lograr. Si quieres ayudar con alguno de estos, eso sería increíble. Sería aún más increíble si comenzara una conversación sobre sus intenciones para limitar las posibilidades de esfuerzo duplicado o diseños incongruentes.
Haré todo lo posible para proporcionar un software fácil de usar y robusto. Sin embargo, es muy probable que haya errores. Si encuentra un error, infórmelo.
La mejor manera de informar un error es usar la pestaña Problemas en GitHub.
Al informar un error/problema, asegúrese de proporcionar suficientes detalles. Los detalles clave para incluir son:
Esta sección enumera algunos proyectos que influyeron en este proyecto, así como los enlaces a algunos recursos que pueden seguir siendo útiles para mantenerse al día.
Si bien hasta ahora se ha logrado mucho en este proyecto, todavía hay mucho que se puede hacer con el controlador de vapor (especialmente dado las bases que se ha establecido hasta este punto). Para capturar y rastrear estas ideas, se han realizado documentos para cada subproyecto. Un buen lugar para comenzar es el documento TODO de alto nivel. Esto cubre los objetivos de nivel más alto para el proyecto al tiempo que proporciona enlaces a las TDO específicas de los subproyectos.