3 * Firmware update check
5 * Custom firmware versions need a folder in www/firmware/,
6 * e.g. www/firmware/0.9.2071/.
7 * Each folder needs to contain:
11 * $GLOBALS['forceFirmwareVersion'] can be set to a custom version
13 header('HTTP/1.0 500 Internal Server Error');
15 $rootDir = dirname(__FILE__, 2);
16 require_once $rootDir . '/config.php';
18 if (!isset($_POST['v'])) {
19 header('HTTP/1.0 400 Bad Request');
20 header('Content-Type: text/plain');
21 echo "POST data missing\n";
25 $gsData = json_decode($_POST['v']);
26 if ($gsData === null) {
27 header('HTTP/1.0 400 Bad Request');
28 header('Content-Type: text/plain');
29 echo "POST data invalid\n";
33 if (!isset($gsData->hwid)
34 || !isset($gsData->major)
35 || !isset($gsData->minor)
36 || !isset($gsData->revision)
37 || !isset($gsData->platform)
39 header('HTTP/1.0 400 Bad Request');
40 header('Content-Type: text/plain');
41 echo "POST data incomplete\n";
45 $gsVersion = $gsData->major . '.' . $gsData->minor . '.' . $gsData->revision;
47 $requireUpdate = false;
48 if (isset($GLOBALS['firmwareVersion'])) {
49 $expectedVersion = $GLOBALS['firmwareVersion'];
50 if ($gsVersion != $expectedVersion) {
51 $requireUpdate = true;
54 $expectedVersion = '0.9.2071';
55 if (version_compare($expectedVersion, $gsVersion, '>')) {
56 $requireUpdate = true;
59 if (!$requireUpdate) {
60 header('HTTP/1.0 200 OK');
61 header('Content-type: application/json');
62 echo '{"available":false}' . "\n";
66 list($major, $minor, $revision) = explode('.', $expectedVersion);
69 $firmwareDir = $rootDir . '/www/firmware/' . $expectedVersion;
70 $firmwareFile = $firmwareDir . '/update.img';
72 if (!file_exists($firmwareFile)) {
73 header('HTTP/1.0 200 OK');
74 header('Content-type: application/json');
75 header('X-Problem: Firmware file missing');
76 echo '{"available":false}' . "\n";
80 $changelogFile = $firmwareDir . '/changelog.txt';
82 if (file_exists($changelogFile)) {
83 $changelog = file_get_contents($changelogFile);
90 'revision' => $revision,
92 'name' => $expectedVersion,
93 'description' => $changelog,
94 'timestamp' => filemtime($firmwareFile),
95 'url' => 'http://update.gamestickservices.net/firmware/download?version=' . $expectedVersion,
98 $json = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
100 header('HTTP/1.0 200 OK');
101 header('Content-Type: application/json');