Jakiś czas temu zmagałem się z niestabilnym OTA z LN882H podczas korzystania z przeglądarki Firefox.
Jeśli jesteś zainteresowany całą historią, możesz przeczytać jej większość w tym poście:
https://www.elektroda.com/rtvforum/topic4028087-240.html#21312889
Okazało się, że wystąpił problem z kodem OTA SDK, a ponieważ OBK używa kodu OTA nieco inaczej, bufor mógł zostać wypełniony większą ilością danych niż oczekiwał kod. A dostęp do pamięci poza przydzieloną przestrzenią zwykle nie jest dobrym pomysłem
.
Znalezienie winowajcy zajęło mi kilka dni, więc spędziłem sporo czasu na szukaniu kodu OTA.
Ponieważ wykonałem również podstawowe testy w celu zweryfikowania działania, dowiedziałem się, że jest to "tylko" wysyłanie żądania HTTP POST do odpowiedniej strony urządzenia.
A to doprowadziło do pytania, czy zawsze potrzebujesz (bardzo przydatnej) aplikacji internetowej, "tylko" do aktualizacji?
O.k, możesz zapytać, dlaczego nie? Często używam pojedynczego połączenia z urządzeniem bez internetu, więc aby korzystać z aplikacji, trzeba ją "hostować" lokalnie (np. za pomocą instalacji docker).
Ponieważ wszystkie nowsze przeglądarki obsługują funkcję "fetch()", mógłbym zrobić prosty dodatek do strony OTA, aby przesłać oprogramowanie układowe.
Nie jest to tak wygodne, jak użycie przeciągnij i upuść w aplikacji, nie ma sprawdzania dostarczonego pliku - ale w końcu zapewnia bardzo proste rozwiązanie.
Na razie mogłem przetestować tylko na urządzeniach, które posiadam: LN882H, BK7231N, ESP32 i W800 (przy okazji dodałem OTA dla W800)
.
Test dla innych platform byłby świetny.
Aktualne żądanie ściągnięcia jest tutaj:
https://github.com/openshwprojects/OpenBK7231T_App/pull/1471
Widząc to w akcji na W800
PS: Ponieważ kod W800 wydaje się mieć podobny problem jak kod LN882H, który wymagał pewnych zmian, jestem całkiem pewien, że będzie to również problem z W600. Ale ponieważ nie posiadam go, nie wprowadziłem tutaj zmian.
Może w osobnym PR
Jeśli jesteś zainteresowany całą historią, możesz przeczytać jej większość w tym poście:
https://www.elektroda.com/rtvforum/topic4028087-240.html#21312889
Okazało się, że wystąpił problem z kodem OTA SDK, a ponieważ OBK używa kodu OTA nieco inaczej, bufor mógł zostać wypełniony większą ilością danych niż oczekiwał kod. A dostęp do pamięci poza przydzieloną przestrzenią zwykle nie jest dobrym pomysłem
Znalezienie winowajcy zajęło mi kilka dni, więc spędziłem sporo czasu na szukaniu kodu OTA.
Ponieważ wykonałem również podstawowe testy w celu zweryfikowania działania, dowiedziałem się, że jest to "tylko" wysyłanie żądania HTTP POST do odpowiedniej strony urządzenia.
A to doprowadziło do pytania, czy zawsze potrzebujesz (bardzo przydatnej) aplikacji internetowej, "tylko" do aktualizacji?
O.k, możesz zapytać, dlaczego nie? Często używam pojedynczego połączenia z urządzeniem bez internetu, więc aby korzystać z aplikacji, trzeba ją "hostować" lokalnie (np. za pomocą instalacji docker).
Ponieważ wszystkie nowsze przeglądarki obsługują funkcję "fetch()", mógłbym zrobić prosty dodatek do strony OTA, aby przesłać oprogramowanie układowe.
<p>Upload firmware file for OTA - !!!Be aware, no file check is done!!!<p>
<input id='otafile' type='file'> <input type='button' class='bred' onclick='doota();' value='DO OTA - No file check - reboot after OTA'>
<script>
function doota(){
var input = document.getElementById('otafile');
if (input.files[0]){
fetch('/api/ota', {
method: 'POST',
body: input.files[0]}
).then((resp) => {
if(resp.ok){
console.log('ota successfull; rebooting');
fetch('/index?restart=1');
}
else console.log('ota not successfull');
}
}
else alert('no file selected')
}
</script>Nie jest to tak wygodne, jak użycie przeciągnij i upuść w aplikacji, nie ma sprawdzania dostarczonego pliku - ale w końcu zapewnia bardzo proste rozwiązanie.
Na razie mogłem przetestować tylko na urządzeniach, które posiadam: LN882H, BK7231N, ESP32 i W800 (przy okazji dodałem OTA dla W800)
Test dla innych platform byłby świetny.
Aktualne żądanie ściągnięcia jest tutaj:
https://github.com/openshwprojects/OpenBK7231T_App/pull/1471
Widząc to w akcji na W800
PS: Ponieważ kod W800 wydaje się mieć podobny problem jak kod LN882H, który wymagał pewnych zmian, jestem całkiem pewien, że będzie to również problem z W600. Ale ponieważ nie posiadam go, nie wprowadziłem tutaj zmian.
Może w osobnym PR
Fajne? Ranking DIY