Git Product home page Git Product logo

stadia-controller-flasher's Introduction

Stadia Controller Flasher

This repository retains an original backup of the Stadia Controller flasher utility sitting at https://stadia.google.com/controller/, the repository aims to have a web-based flasher to be able to revert the Stadia controller to its original Gotham firmware (Wi-Fi enabled).

Disclaimer

This utility can brick your device, keep in mind everything is work in progress and experimental, please use the original flashing utility on the official site: https://stadia.google.com/controller

Quick start

The utility is automatically built and hosted on github pages at this address https://luigimannoni.github.io/stadia-controller-flasher/

Run it locally

To run the utility write open up your terminal and install all node modules by typing in npm install.

Serve the utility by running npm run serve then open the site on https://localhost:5000

The app has been changed to allow the controller to be flashed with Bruce firmware and revert with the latest Gotham build (which has been never released).

Largely work in progress.

Firmware select

By adding ?device_type= on the url as query parameter a different firmware type can be flashed onto the device, the query parameter value can be one of:

  • pvt for Production firmware
  • dvt for Staging firmware
  • dev for Dev firmware

Binary Build

Pre-build standalone executables can be found on the Releases tab

Follow these steps to build for Windows, Mac and Linux if you wish to build executables yourself:

  • npm run pkg
  • then run the binary with ./dist/stadia-controller-flasher-linux

Triggering a release

  1. npm version --git-tag-version <patch|minor|major|version_number>
  2. git push origin <version_branch> --tags

Credits

Credits to all contributors, listed on the Contributor tab, and to the r/stadia community, particularly to:

  • /u/ig-88ms
  • /u/debianite
  • /u/madushan1000
  • /u/parkerlreed

For the initial research, fetching all hidden Firmware files and general knowledge.

stadia-controller-flasher's People

Contributors

erisfiregamer1 avatar kwuite avatar luigimannoni avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

stadia-controller-flasher's Issues

Deminify flashing logic code (help wanted)

Picking up slowly, sadly flashing stuff is not within my keys skills so maybe someone seasoned can pick this task up and strip out/deminify or refactor the flashing logic inside the src/app.js file.

  • Detect/Isolate flashing logic
  • Deminify flashing logic
  • Document flashing process

curl request for latest firmware

Figured this would be good to archive for if/when this goes down.

The request has the "current" slot A or B and gives you back the opposite slot. So yes definitely supports two firmware.

(deck@steamdeck src)$ curl -s 'https://update.googleapis.com/service/update2' --data-binary '@-' -H 'Content-Type: text/xml' <<'EOF' | xmllint --format -
<?xml version="1.0" encoding="UTF-8"?>
<gupdate protocol="3.0" xmlns="http://www.google.com/update2/request">
<app appid="{50940242-7306-4f20-80f1-dde7c638f235}" track="stable-channel" board="gotham-pvt" image="b">
    <updatecheck />
</app>
</gupdate>
EOF

<?xml version="1.0" encoding="UTF-8"?>
<response protocol="3.0" server="prod">
  <daystart elapsed_days="5863" elapsed_seconds="57611"/>
  <app appid="{50940242-7306-4f20-80f1-dde7c638f235}" cohort="1::" cohortname="" status="ok">
    <updatecheck status="ok">
      <urls>
        <url codebase="http://edgedl.me.gvt1.com/edgedl/googletv-eureka/stable-channel/"/>
        <url codebase="http://redirector.gvt1.com/edgedl/googletv-eureka/stable-channel/"/>
      </urls>
      <manifest version="282115">
        <actions>
          <action event="install" run="ota.282115.stable-channel.gotham-pvt-a.214f6fe20f7b993046c77a9245c5805b056882dc.bin"/>
          <action DisplayVersion="282115" DoFDR="false" DownloadRate="0" Foreground="true" RequireCharging="false" UpdateTiming="1" event="postinstall"/>
        </actions>
        <packages>
          <package fp="1.269bb21160ea6d1366e71bb9c9b148e2782ea967b81c7b6ff038e7d49b61e00f" hash="IU9v4g97mTBGx3qSRcWAWwVogtw=" hash_sha256="269bb21160ea6d1366e71bb9c9b148e2782ea967b81c7b6ff038e7d49b61e00f" name="ota.282115.stable-channel.gotham-pvt-a.214f6fe20f7b993046c77a9245c5805b056882dc.bin" required="true" size="4163944"/>
        </packages>
      </manifest>
    </updatecheck>
  </app>
</response>

(deck@steamdeck src)$ curl -s 'https://update.googleapis.com/service/update2' --data-binary '@-' -H 'Content-Type: text/xml' <<'EOF' | xmllint --format -
<?xml version="1.0" encoding="UTF-8"?>
<gupdate protocol="3.0" xmlns="http://www.google.com/update2/request">
<app appid="{50940242-7306-4f20-80f1-dde7c638f235}" track="stable-channel" board="gotham-pvt" image="a">
    <updatecheck />
</app>
</gupdate>
EOF

<?xml version="1.0" encoding="UTF-8"?>
<response protocol="3.0" server="prod">
  <daystart elapsed_days="5863" elapsed_seconds="57617"/>
  <app appid="{50940242-7306-4f20-80f1-dde7c638f235}" cohort="1::" cohortname="" status="ok">
    <updatecheck status="ok">
      <urls>
        <url codebase="http://edgedl.me.gvt1.com/edgedl/googletv-eureka/stable-channel/"/>
        <url codebase="http://redirector.gvt1.com/edgedl/googletv-eureka/stable-channel/"/>
      </urls>
      <manifest version="282115">
        <actions>
          <action event="install" run="ota.282115.stable-channel.gotham-pvt-b.b252d0d5a16538621abfb09609746cabc0f33292.bin"/>
          <action DisplayVersion="282115" DoFDR="false" DownloadRate="0" Foreground="true" RequireCharging="false" UpdateTiming="1" event="postinstall"/>
        </actions>
        <packages>
          <package fp="1.1cbc35203ff83a5244a8a9b2590938983f162259dfdb6235321d60e9356ce44e" hash="slLQ1aFlOGIav7CWCXRsq8DzMpI=" hash_sha256="1cbc35203ff83a5244a8a9b2590938983f162259dfdb6235321d60e9356ce44e" name="ota.282115.stable-channel.gotham-pvt-b.b252d0d5a16538621abfb09609746cabc0f33292.bin" required="true" size="4163944"/>
        </packages>
      </manifest>
    </updatecheck>
  </app>
</response>

Replace minified closure and revert frontend with a proper framework

All html is pretty much managed from goog.dom but it's heavily minified, so working with it is a pain.
Might be ideal to have another framework which is quick to use and maintain in case the flashing app needs new screens.

  • Vite/Rollup/Webpack?
  • React/Vue?
  • Convert all goog.dom elements into single reusable components
  • Rebuild the main page template with the new components
  • Test a full build/full flash afterwards

Might be dependent from #4

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.