Bem -vindo ao projeto Open Steam Controller!
Este é um projeto em que tenho trabalhado para desconstruir, documentar, redirecionar e expandir o firmware e o hardware do controlador de vapor.
Primeiro, é importante falar um pouco sobre o controlador Steam (o hardware no qual este projeto está focado).

O Controlador Steam é um controlador de videogame lançado pela Valve Corporation em 10 de novembro de 2015. Isso fez parte da iniciativa da Valve para dar aos jogadores de PC a opção de uma experiência semelhante ao console (ou seja, o jogador do sofá que fica na frente de uma TV e usa um controlador em vez de teclado e mouse).

O controlador Steam tentou manter alguns aspectos familiares aos modernos controladores de videogame (ou seja, um bastão analógico esquerdo, quatro botões de face, dois botões de ombro e pára -choques), além de alterar algumas das normas que esperamos (ou seja, substituindo o bloco direcional e o bastão analógico direito por trackpads).

Detalhes adicionais sobre o controlador podem ser encontrados na página oficial do produto
Você pode estar se perguntando por que esse projeto existe e por que eu investi uma quantidade não negligenciável do meu tempo e energia nele nos últimos dois anos.
Primeiro, achei o design desse controlador atraente. Ter dois trackpads no lugar do D-Pad e do Stick Right Analog é uma ideia interessante. Os trackpads podem ser configurados para agir de várias maneiras e não apenas imitar o que substituíram, mas também fornecem novos paradigmas de interação. Além disso, a idéia de usar os hápticos para tocar um pouco de jingle quando o controlador é iniciado ou desligado é um toque elegante que fez o controlador se destacar ainda mais. Ser capaz de personalizar totalmente esses jingles foi um desejo quase imediato quando comecei a usar o controlador.
Segundo, o controlador ficou bastante acessível. Ser capaz de fazer upload de atualizações de firmware fizeram manualmente a barreira para a entrada para executar o firmware personalizado muito menor. Ainda havia um desafio considerável para conseguir um "Hello World" (ou seja, piscar o led de botão de vapor) funcionando. No entanto, isso não foi tão difícil quanto eu imagino fazer algo semelhante em um controlador projetado para ser mais resistente ao temperamento. Eu realmente aprecio o fato de que a Valve deixou esse hardware tão acessível quanto eles e não desencoraja as pessoas de tentar invadi -lo.
Terceiro, o IFIXIT fez uma desmontagem muito agradável do controlador. Isso me deu uma idéia do que o controlador tinha como interno, sem precisar (inicialmente) desmontar meu hardware. Isso apontou muitos periféricos e processadores elegantes com os quais pensei que seria legal trabalhar, especialmente no contexto de um produto que já foi projetado para um propósito específico.
Agora que o controlador e alguns de seus recursos (padrão) foram explicados, podemos começar a falar sobre este projeto. Ou seja, quero cobrir o que foi realizado e o que espero realizar em frente.
Observe que o seguinte é um pouco detalhado e narrativo. Há muito conteúdo neste projeto e esta é uma tentativa de dividir os detalhes de uma maneira que dará uma Lay da terra para as pessoas novas nesse esforço. Se você é um tipo de pessoa do TLDR, consulte a seção Aviso e aviso abaixo e sinta -se à vontade para entrar na seção de subprojetos para chegar à carne do esforço. Você também deve verificar os vídeos de demonstração que mostram algumas das principais realizações em ação.
Como mencionado anteriormente, a principal intenção deste projeto é explorar, desconstruir e expandir as opções e usos de configuração para o controlador de vapor. No entanto, isso é um pouco vago. Então, vamos começar com alguns exemplos. Primeiro, um dos principais objetivos deste projeto era poder escrever firmware personalizado para o processador principal do controlador. É isso que abre a porta para muitas outras possibilidades avançam.
No entanto, antes que eu pudesse começar a escrever firmware, precisava de mais informações sobre o controlador. A Valve foi agradável o suficiente para deixar a porta aberta para acessar a versão binária do firmware e a capacidade de atualizar o processador principal com facilidade. No entanto, eles não forneceram esquemas ou uma lista de componentes ou folhas de dados que um engenheiro de software incorporado normalmente teria se encarregado do processo de gravar firmware personalizado. Portanto, eu precisava me voltar para a engenharia reversa. Isso se resume a desconstruir o hardware e o firmware oficial, para que eu possa entender como escrever meu próprio firmware. Nesse ponto, o esforço de engenharia reversa seguiu principalmente seu curso, pois muito foi descoberto, documentado e utilizado para outros esforços. Detalhes sobre o esforço de engenharia reversa podem ser encontrados no subprojeto de engenharia reversa.
Agora que um esforço de engenharia reversa foi estabelecido e comecei a coletar informações sobre o hardware, pude começar a escrever firmware personalizado. Confira o subprojeto de firmware para ver o estado atual do software. Principalmente, este é o software de utilidade para permitir que um usuário consulte diferentes periféricos ou faça medições em diferentes estados (como algumas informações precisavam ser capturadas e se alimentam de volta ao processo de engenharia reversa para mantê -lo em frente). No entanto, acabou ficando claro que havia uma funcionalidade suficiente que foi capturada aqui que não seria muito trabalho adicional para fazer com que esse hardware atuasse como um controlador para outros consoles (ou seja, o Nintendo Switch).
Em seguida, chegamos ao que era originalmente a única intenção deste projeto. Ou seja, o objetivo de poder ter controle total das músicas (Jingles) que o controlador Steam toca (através do trackpad Happics) em Power Up and Desligar. Devido a algumas descobertas através do esforço de engenharia reversa, esse projeto permite que os jingles sejam totalmente personalizados e que essas personalizações persistam enquanto ainda executa o firmware oficial da Valve. Para obter detalhes sobre como personalizar os jingles no seu controlador ou para obter mais detalhes (ou seja, como os dados do jingle são formatados e como podemos personalizar jingles sem modificar o firmware oficial), consulte o subprojeto Jingles.
Finalmente, é importante mencionar que outra intenção deste projeto é ser um recurso educacional e/ou motivacional. Talvez você esteja interessado no controlador de vapor. Ou talvez você esteja interessado em escrever software incorporado para um dispositivo comercial. De qualquer maneira, a esperança é que este projeto forneça informações claras e concisas para inspirar e permitir que as pessoas aprendam e façam mais. Sei que aprendi muito com esse esforço, e se alguma dessas coisas pode ser compartilhada e ajudar os outros, isso seria ótimo.
Para um ponto de partida sobre detalhes adicionais e as realizações e intenções futuras deste projeto, consulte a seção Subprojects abaixo.
Reconheça que, ao utilizar qualquer parte deste projeto, você está fazendo isso por sua conta e risco. Este é um esforço de engenharia reversa e não faço reivindicações de entender completo o hardware para o qual estou fornecendo firmware personalizado ou modificado. Esperamos que os testes que eu execute antes de publicar minhas descobertas e modificações evitarão danos ao seu controlador de vapor ou qualquer coisa que você possa conectar seu controlador de vapor (ou seja, o Nintendo Switch). No entanto, não posso garantir isso.
Além disso, observe que isso está sendo compartilhado principalmente para fins educacionais. Embora isso possa permitir que um usuário faça coisas como usar o controlador Steam no Nintendo Switch, reconheça que isso quase definitivamente virá com trocas em comparação com hardware e firmware com suporte oficial. Se você deseja um controlador de switch barato e está bem com ele conectado, consulte os que o Powera ou o Hori faz. Se você deseja um controlador totalmente em destaque, considere gastar o dinheiro extra e obter um controlador profissional (realmente vale a pena).
Finalmente, observe que digo tudo isso com a esperança de não desencorajar ninguém. Por favor, mergulhe e suja as mãos. Apenas esteja ciente de que há uma chance (esperançosamente) muito pequena, mas diferente de zero, de que um erro possa levar a hardware emparado ou quebrado.
Esta seção fornece breves esboços e demonstrações (se aplicável) dos principais esforços deste projeto. Mais detalhes sobre cada subprojeto podem ser encontrados em seus respectivos diretórios.
O trabalho neste diretório é voltado para criar uma construção de firmware completamente personalizada para o controlador de vapor. Este projeto pode ser configurado para que o controlador atue como um sistema de desenvolvimento que permite consultar periféricos e explorar ou verificar os comportamentos do sistema. Além disso, o projeto pode ser configurado para fins mais práticos, como se comportar como um controlador de comutador Nintendo com fio.
Abaixo estão alguns vídeos que demonstram as diferentes construções de firmware:
Controlador de vapor aberto: Nintendo Switch
Controlador de vapor aberto: placa de desenvolvimento
O trabalho neste diretório é voltado para a criação de uma maneira amigável para personalizar o que os jingles são reproduzidos quando o controlador Steam é iniciado e desligar.
Abaixo está um vídeo demonstrando como personalizar jingles no controlador Steam:
Controlador de vapor aberto: personalização jingle
O trabalho neste diretório se concentra na desconstrução do firmware e o hardware do controlador Steam. O entendimento obtido com isso geralmente é um
parte significativa dos outros subprojetos.
O Steam oferece a capacidade de alterar determinadas opções de configuração para um controlador de vapor (ou seja, alteração de brilho de LED, alteração que o jingle será reproduzido pela memória do sistema). Este diretório contém trabalho para entender, reproduzir e, talvez, expandir essa funcionalidade.
Este é um projeto de código aberto; portanto, use isso como desejar (desde que não viole nenhuma licença declarada).
Se você deseja oferecer contribuições para este repositório, isso seria ótimo. Isso pode vir na forma de questões/discussões sobre como isso pode ser mais fácil de usar ou adicionando recursos ou suporte que ainda não estão lá.
Observe que existem documentos TODO para cada subprojeto. A idéia é delinear os objetivos que eu gostaria de alcançar. Se você quiser ajudar com qualquer um deles, seria incrível. Seria ainda mais impressionante se você iniciasse uma conversa sobre suas intenções, a fim de limitar as chances de esforço duplicado ou designs incongruentes.
Farei o meu melhor para fornecer software fácil de usar e robusto. No entanto, ainda haverá bugs. Se você encontrar um bug, denuncie -o.
A melhor maneira de relatar um bug é usar a guia Problemas no GitHub.
Ao relatar um bug/problema, não deixe de fornecer detalhes suficientes. Os principais detalhes a serem incluídos são:
Esta seção lista alguns projetos que influenciaram esse projeto, bem como links para alguns recursos que podem continuar sendo úteis para se manter atualizado.
Embora muito tenha sido realizado neste projeto até agora, ainda há muito que pode ser feito com o controlador de vapor (especialmente considerando as bases que foram colocadas até este ponto). Para capturar e rastrear essas idéias, foram feitos documentos para cada subprojeto. Um bom lugar para começar é o documento de nível superior. Isso abrange as metas de nível mais alto para o projeto, fornecendo links para TODOs específicos do subprojeto.