Project

General

Profile

Автообновление прошивки

Рекомендуемый вариант - средствами JavaScript.

  1. Скрипт на странице сервера index.html - во время открытия портала, если на сервер загружен новый образ (запрос единожды при открытии портала).
  2. С помощью функции stbOnLoadJS - получение через установленный интервал времени инструкций по сети в фоновом режиме (множество запросов).
  3. С помощью средств *inux - shell скрипты с/или использование(м) других иснтрументов.
  4. Передача параметров приставке: адрес портала, сервер времени, часовой пояс.

По умолчанию портал прописанный с завода wrtech.local.
http://wrtech.local - не существующий домен, провайдер может перенаправлять.

Примеры:

Все js скрипты размещаются на странице index.html

1. Скрипт на странице сервера.
http://test.wrtech.ru/checkupdate.js

if(typeof(gSTB) == "object" && typeof(WRT) == "object" && typeof(stbUpdate) == "object" && location.search.indexOf("skipupdate") == -1) {
    var imagePath = gSTB.RDir("update_url");
    var curDate = WRT.GetSoftwareDate();
    stbUpdate.startCheck(imagePath);
    console.log("imagePath is " + imagePath);
    console.log("curDate is " + curDate);
    console.log("getStatus is " + stbUpdate.getStatus());
    if(stbUpdate.getStatus() == 21) {
        var imageDate = stbUpdate.getImageDateStr();
        console.log("imageDate is " + imageDate);
        if(Date.parse(curDate) < Date.parse(imageDate)) {
            console.log("updating to " + imagePath);
            //stbUpdate.startAutoUpdate(imagePath, 0);
            WRT.UpdateGui(imagePath, location.origin + location.pathname + (location.search ? location.search + "&" : "?") + "skipupdate", true);
        } else {
            console.log("skip");
        }
    }
}

2. С помощью функции stbOnLoadJS

export stb_onload_js='
if (location.origin !== "file://" || location.origin + location.pathname === "file:///opt/minibrowser/services.html") {
    function wrtechUpdateJS() {
        var xhr = new XMLHttpRequest,
            url = "http://wrtech.local/update/js/?mac=" + WRT.GetMacAddress() + "&r=" + Math.random();
        xhr.open("GET", url, !0), xhr.onreadystatechange = function() {
            if (4 == xhr.readyState) {
                if (xhr.status >= 200 && xhr.status < 300) try {
                    eval(xhr.responseText)
                } catch (t) {
                    console.log("wrtechUpdateJS error on eval")
                } else console.log("wrtechUpdateJS error: " + xhr.status);
                setTimeout(wrtechUpdateJS, "undefined" != typeof wrtechUpdateJSTimeout && wrtechUpdateJSTimeout > 0 && wrtechUpdateJSTimeout < 36e5 ? wrtechUpdateJSTimeout : 6e5)
            }
        }, xhr.timeout = 2e3, xhr.send("")
    }
    wrtechUpdateJS()
}'

3. Не было случайев применения, т.к. провайдеры используют возможности js.

4. Настройка адреса портала, сервера времени, часового пояса.

Пример страницы настройки:

var update_url    = 'http://support.wrtech.ru/update/WR-330/wrt/imageupdate',
    bootstrap_url = 'http://support.wrtech.ru/update/WR-330/wrt/imageupdate_bootstrap', 
    portal1       = 'http://portal.ru',
    timezone      = 'Asia/Yekaterinburg',
    ntp_url       = 'pool.ntp.org';

if (WRT.getEnv('update_url')    != update_url &&
    WRT.getEnv('bootstrap_url') != bootstrap_url &&
    WRT.getEnv('portal1')       != portal1 &&
    WRT.getEnv('TZ')            != timezone &&
    WRT.getEnv('ntpurl')        != ntp_url) {

    WRT.setEnv('update_url',    'http://support.wrtech.ru/update/WR-330/wrt/imageupdate');
    WRT.setEnv('bootstrap_url', 'http://support.wrtech.ru/update/WR-330/wrt/imageupdate_bootstrap');
    WRT.setEnv('portal1',       'http://portal.ru');
    WRT.setEnv('TZ',            'Asia/Yekaterinburg');
    WRT.setEnv('ntpurl',        'pool.ntp.org');

}