Programista

Jestem doświadczonym inżynierem oprogramowania systemów wbudowanych. Zajmuję się tworzeniem dedykowanych rozwiązań niskopoziomowych opartych na systemie Linux/Yocto.

 

Zrealizowane projekty

Moduł synchronizacji czasu

Zaimplementowałem dedykowane rozwiązanie synchronizujące czas systemowy i zegar czasu rzeczywistego z zdalnymi serwerami NTP. Moduł zapewnia, że wykorzystywane certyfikaty zawsze są aktualizowane.

Secure boot

Zadanie polegało na zaprojektowaniu oraz implementacji bezpiecznego procesu bootowania (secure boot) systemu Linux z poziomu bootloadera u-boot. Cały proces konfiguracji, generowania oraz podpisywania docelowego obrazu zintegrowany został z mechanizmem Yocto.

Sterownik diod LED RGB

Zaprojektowany i od podstaw zaimplementowany sterownik dla systemu Linux, którego rolą jest konfigurowanie oraz synchroniczne zarządzanie pracą kilku diod LED RGB. Rozwiązanie jest w pełni elastyczne i umożliwia definiowanie oraz ustawianie schematów świecenia z poziomu przestrzeni użytkownika.

System aktualizacji oprogramowania

Celem zadania było zaprojektowanie bezpiecznego systemu aktualizacji oraz uruchamiania oprogramowania. Rozwiązanie oparte jest na kompleksowej konfiguracji i integracji wszystkich elementów systemu takich jak bootloader u-boot, Linux, oprogramowanie swupdate oraz weryfikacja obrazów z różnych nośników np. USB.

Pakiet wsparcia BSP

Zadanie polegało na dostarczeniu kompletnego pakietu wsparcia BSP dla platformy opartej na procesorze i.MX 6QuadPlus. W skład BSP wchodził bootloader u-boot, dystrybucja Linuksa, system aktualizacji oraz SDK dla programistów. Cały proces został zintegrowany z systemem Yocto.

Serwis typu SaaS

Projekt jest serwisem typu SaaS, umożliwiającym wielu użytkownikom zarządzanie oraz monitorowanie swoich zleceń transportowych. Jest to model usługi chmury napisany przeze mnie od podstaw z następującym stosem oprogramowania Docker/Django/Bootstrap. System z powodzeniem działa w środowisku komercyjnym.

Analizator sygnału DCF77

Projekt hobbystyczny mający na celu zaprojektowanie i zaprogramowanie urządzenia odbierającego wzorzec czasu wysyłany sygnałem radiowym. Nadawany jest on z miejscowości Mainflingen w Niemczech i stabilizowany jest za pomocą cezowego zegara atomowego.

Dostosowania silnika graficznego Kanzi

Projekt polegał na dostosowaniu kodu źródłowego slinika graficznego bazującego na technologi Kanzi do wymogów standardu MISRA C 2012. Produkt końcowy stworzony został dla przemysłu motoryzacyjnego.

Aplikacja kamery cofania w samochodzie

Zadanie polegało na zaprojektowaniu oraz stworzeniu prototypu systemu wizyjnego kamery cofania z przetwarzaniem obrazu na potrzeby przemysłu motoryzacyjnego. Streaming został zrealizowany na bazie biblioteki gstreamer z rozszerzonym pluginem analizy obrazu bazującym na bibliotece przetwarzania obrazu OpenCV.

Serwer RTSP do streamingu Audio/Video

Projekt polegał na napisaniu od podstaw serwera RTSP przesyłającego w czasie rzeczywistym strumień audio i video. Rozwiązanie zostało stworzone dla mobilnego systemu monitoringu 4G. Docelowy produkt powstała na zlecenie dużej firmy z branży elektroniki użytkowej i jest powszechnie dostępny dla klientów indywidualnych.

Dedykowany system plików

Celem projektu było zaprojektowanie oraz wykonanie wbudowanego systemu plików dla dedykowanego urządzenia. W skład zaproponowanego rozwiązania wchodzi okrojony oraz dostosowany bootloader U-boot, skonfigurowane jądro systemu Linux oraz minimalny, w pełni funkcjonalny i bezpieczny system plików oparty na projekcie Buildroot.

Bring-up systemu Android

Celem projektu było przeportowanie nowej wersji systemu Android 5.0 Lollipop na kilka modeli telefonów komórkowych dla jedengo z największych producentów. Międzynarodowy zespół projektowy liczył kilkudziesięciu programistów oraz testerów. Osobiście zajmowałem się niskopoziomowymi zagadnieniami związanymi ze sterownikami oraz jądrem systemu. Nasze rozwiązania przygotowywane są do aktualizacji dla milionów użytkowników na całym świecie.

Przeportowanie modemu LTE na OpenWrt

Projekt polegał na przeportowaniu aplikacyjnej części modemu LTE pracującego pod kontrolą systemu czasu rzeczywistego OSE na dedykowaną wersję Linuksa/OpenWrt. Do zakresu prac należało skonfigurowanie i uruchomienie Linuksa wraz ze środowiskiem OpenWrt oraz stworzenie warstwy portującej całą funkcjonalność aplikacyjną modemu LTE. Platforma sprzętowa składała się z dwóch procesorów ARM Cortex-R4, gdzie na jednym z nich uruchomoiny został Linux, a na na drugim bez zmian uruchomiony był system OSE.

BSP dla platformy opartej na TI DaVinci

Projekt polegał na stworzeniu całego stosu oprogramowania dla zaprojektowanej platformy sprzętowej opartej na procesorze TMS320DM6467. W skład stosu wchodzi dedykowana wersja bootloadera U-boot wraz z nowymi funkcjonalnościami oraz specjalnie dostosowane jądro systemu Linux wraz z niezbędnymi sterownikami dostępnych peryferiów. Dodatkowo na potrzeby aplikacji końcowej stworzyłem dedykowany system plików.

System wykrywania pożarów w lesie

Głównym zadaniem systemu jest kodowanie, streaming oraz analiza obrazu video pochodzącego z kamery przemysłowej umieszczonej na wysokości na obszarach leśnych w celu wykrycia zagrożenia pożarowego. System pracuje na platformie TI DaVinci DM6447 pod kontrolą dedykowanego systemu Linux, a algorytmy analizujące obrazy video zaimplementowane są z wykorzystaniem biblioteki OpenCV. System tworzony jest dla podmiotu zajmującego się ochroną przeciwpożarową obszarów leśnych.

Moduł zbierania statystyk z sieci GSM

Projekt polega na zaprojektowaniu oraz implementacji modułu statystyk do systemu lokalizującego urządzenia w sieci GSM. Kilku poziomowy i rozproszony moduł statystyk odpowiedzialny jest za zbieranie, katalogowanie oraz przeliczanie danych pochodzących z milionów urządzeń na całym świecie i ostatecznie zapisywanie ich w bazach danych. Oprogramowanie pracuje w rozbudowanym środowisku wieloprocesorowym pod kontrolą systemu z rodziny Unix. Projekt tworzony jest dla jednego z największych dostawców usług lokalizacyjnych GSM na świecie.

Dostosowanie systemu Android

Celem projektu było przeportowanie nowej wersji systemu Android 4.0 Ice Cream Sandwich na kilka modeli telefonów komórkowych dla jednego z największych producentów. Wszystkie moje propozycje z powodzeniem przeszły testy wewnętrzne oraz kompatybilności (Compatibility Test Suite) firmy Google. Nasze rozwiązania przygotowywane są do aktualizacji dla milionów użytkowników na całym świecie.

Oprogramowanie do zarządzania produkcją

Moja rola w projekcie polegała na utrzymaniu i rozwoju dedykowanej aplikacji desktopowej do zarządzania produkcją oraz zespołem pracowników. Aplikacja została napisana z wykorzystaniem biblioteki Qt 5.8 i docelowo działa w środowisku Windows.

Bezprzewodowy zestaw słuchawkowy

Projekt polegał na rozwijaniu firmwaru bezprzewodowego zestawu słuchawkowego, oferującego pełną integrację z urządzeniem nadrzędnym np. telefonem komórkowym. Stos oprogramowania składa się z firmwaru bazującego na systemie operacyjnym czasu rzeczywistego uC/OS oraz z aplikacji hostującej na telefonie z systemem Android lub iOS.

Sterownik NFC Dynamic Tag

Celem projektu było zaprojektowanie oraz napisanie od podstaw sterownika dla modułu NFC Dynamic Tag (FeliCa Plug) dla systemu Linux oraz Android. FeliCa Plug jest modułem komunikacyjnym umożliwiającym stworzenie taga kompatybilnego z technologią NFC (Near Field Communication) z dynamicznie zmieniającą się zawartością. Zaprojektowany oraz stworzony przeze mnie sterownik wchodzi w skład większego projektu w masowym zastosowaniu w branży Digital Signage. Całość prac został przeprowadzony na platformie PandaBoard wraz z jądrem Linuksa w wersji 3.0.

Kodowanie i streaming audio/video

Celem projektu było stworzenie oprogramowania kodującego w czasie rzeczywistym analogowy sygnał video kodekiem H.264 i streamowanie go do klientów protokołem RTSP. Kodowanie surowego sygnału video z podłączonej kamery w całości przeprowadzane jest na procesorze DSP, a za streaming odpowiada procesor ARM wraz z dedykowaną aplikacją wykorzystującą bibliotekę live555. Całość pracuję pod kontrolą specjalnie przygotowanego systemu Linux. Przedstawione rozwiązanie wykorzystane jest w zaawansowanym Systemie wykrywania pożarów na podstawie analizy strumienia video mojego autorstwa.

Bootloader dla urządzenia Set-Top Box

Celem projektu było stworzenie zaawansowanego bootloadera bazującego na projekcie U-Boot dla urządzenia typu Set-Top Box. Zadaniem bootloadera jest aktualizacja oprogramowania oraz jego prawidłowe uruchomienie. Stworzony bootloader z powodzeniem pracuje w masowo produkowanych i używanych urządzeniach w sektorze telewizji cyfrowej.

System GPS śledzenia pojazdów

Celem projektu było stworzenie systemu do zdalnego monitorowania poruszających się obiektów np.: pojazdów, paczek bądź ludzi. Podstawowym założeniem jest możliwość śledzenia swojej floty z każdego miejsca za pomocą przeglądarki internetowej. W efekcie powstał końcowy produkt o nazwie EE-Tracker, który realizuje wszystkie postawione mu cele.

Odtwarzacz internetowych stacji radiowych

Celem projektu było zaprojektowanie oraz wykonanie prototypu urządzenia umożliwiającego odtwarzanie stacji radiowych, zarówno tych w sieci lokalnej jak i internecie. Urządzenie jest w stanie pracować bez jakiejkolwiek ingerencji użytkownika i może być sterowane zdalnie przez administratora poprzez sieć. Dodatkowym atutem jest możliwość tworzenie oraz odgrywania listy utworów MP3 znajdujących się na serwerze w sieci lokalnej.

Modyfikacja BIOS (coreboot)

Głównym celem projektu jest umożliwienie jak najszybszej inicjalizacji wszystkich niezbędnych komponentów modułu MSM800BEV i uruchomienie systemu operacyjnego Linux. Zaproponowane przeze mnie rozwiązanie w głównej mierze opiera się na projekcie coreboot, który to po konfiguracji oraz modyfikacjom rozpoczyna uruchamianie systemu Linux w czasie do 4 sekund.

Kontroler HD Audio dla systemu QNX

Program inicjuje i prawidłowo konfiguruje kontroler Intel High Definition Audio znajdujący się w chipsecie Mobile Intel 945GM Express (mostek ICH7) oraz współpracujący z nim kodek Realtek ALC888 w celu odegrania zadanego pliku dźwiękowego typu wave. Projekt jest odpowiedzią na brak sterowników do najnowszych chipsetów audio pod systemem operacyjnym QNX 4.25 i wykorzystywany jest w elektrowni do odgrywania dźwięków alarmowych. Dodatkowo aplikacja została przeportowana na system QNX 6.32.

System to pomiaru i rejestracji stężenia metanu

Zaprojektowane urządzenie wyposażone jest w dwa czujniki: TGS2600 oraz TGS2611 firmy Figaro służące do ciągłego mierzenia stężenia metanu. Firmware urządzenia został napisany w języku C, natomiast program do rejestrowania i zapisywania wartości stężenia stworzony został w środowisku C++ Builder.

Przeportowanie kompilatora Ada na Lego NXT

Projekt został zrealizowany podczas trzymiesięcznego pobytu w Paryżu w firmie AdaCore. Polegał on przeportowaniu technologii GNAT GPL na platformę Lego Mindstorms NXT (Atmel ARM7 AT91SAM7S256) oraz napisaniu biblioteki w języku Ada umożliwiającej obsługę wszystkich mechanizmów dostarczonych przez system operacyjny czasu rzeczywistego nxtOSEK. W konsekwencji powstał finalny produkt składający się z cross kompilatora języka Ada oraz biblioteki umożliwiającej swobodne programowanie Lego Mindstorm NXT w języku Ada pod systemem operacyjnym czasu rzeczywistego nxtOSEK.

Przeportowanie systemu QNX na platformę Intel XScale

Projekt obejmuje pełne przeportowanie systemu operacyjnego czasu rzeczywistego QNX Neutrino 6.3.2 na platformę Intel XScale PXA255. Jako komputera wbudowanego użyto gotowego zestawu Karo TRITON-UCB StarterKit. Efektem końcowym jest kompletny pakiet BSP zawierający dostosowany do architektury Intel XScale PXA255, w pełni działający system operacyjny czasu rzeczywistego QNX Neutrino 6.3.2.

Rejestrator dla urządzenia pomiarowego

Głównym zadaniem programu jest rejestracja pomiarów przeprowadzonych przez dedykowane, zewnętrzne urządzenie, podłączone do portu szeregowego komputera. Aplikacja umożliwia również tworzenie wykresu w czasie rzeczywistym.

Programator mikrokontrolerów Motorola

Zaprojektowany układ wprowadza mikrokontroler z rodziny MC68HC908 w tryb Monitor ROM, dzięki czemu można zaprogramować oraz debugować kontroler. Komunikacja odbywa się poprzez port szeregowy komputera oraz oprogramowanie PROG08SZ firmy P&E.

Autonomiczny robot 4UpGrade

Robot został zaprojektowany na II Otwarte Zawody Robotów Mini Sumo organizowane przez Politechnikę Wrocławską. Jest to autonomiczny robot z ciekawą mechaniką, którego zadaniem jest wypchać przeciwnika z doja.

Oprogramowanie do wykrywanie przerw w obwodach PCB

Projekt składa się z dwóch części. Pierwszą z nich jest oprogramowanie napisane dla systemu Linux, realizujące całe przetwarzanie obrazka i wykrywanie przerwy w obwodzie. Jako dane wejściowe program przyjmuje plik graficzny PGM zawierający analizowany obwód drukowany. Po przeanalizowaniu każdej ścieżki, zwracany jest taki sam plik graficzny z zaznaczonymi przerwami w obwodach.