Diagnostyka OBD – cz.2

Rozważania na temat zastosowania gotowej obsługi protokołu diagnostycznego sięgają początków projektu HypeFIS. W Sieci dostępnych jest co najmniej kilkanaście różnych implementacji protokołu KWP1281/2000 – mniej lub bardziej zaawansowanych. Na wstępie odrzuciłem wszystkie związane z platformą Arduino, które ze względu na specyficzną strukturę API tego środowiska są zupełnie nieprzydatne w przyjętym przez nas sposobie strukturyzacji kodu. Inną wadą, dyskwalifikującą prawie wszystkie pozostałe przykłady jest częste przeplatanie się w nich kodu stricte aplikacyjnego z niskopoziomowym kodem drivera, czy dekodera protokołu. Jest to niestety wspólna cecha każdego kawałka kodu, który piszemy “ad hoc”, na kolanie, byle tylko spełnił swoją rolę.

Cóż więc mi pozostało? Zabrałem się za napisanie własnej wersji. O skali trudności tego przedsięwzięcia świadczyć może fakt, iż oprogramowanie podstawowych funkcjonalności zajęło mi około dwóch miesięcy. Sporo czasu poświęciłem także na dopracowanie kwestii związanych ze stabilnością połączenia czy obsługą nietypowych sterowników oraz poprawienia wszelki zauważonych błędów. Implementacja ta funkcjonuje już od kilku lat w projekcie HypeFIS. Z punktu widzenia inżynierii oprogramowania jest więc kodem dojrzałym, dobrze przetestowanym oraz zawierającym wiele “know-how”. Są to główne powody, dla których zdecydowałem się wykorzystać go ponownie w naszym urządzeniu.

Poprawnie zaprojektowana struktura, o której wspominałem we wczorajszym artykule, pozwala niezwykle łatwo osadzić implementację protokołu KWP1281/2000 wraz z demonem na nowej platformie. Jedynym wymaganym elementem jest nowy driver, zapewniający współpracę ze sprzętem. Sam rdzeń pozostaje niezmieniony – jest to efekt braku bezpośrednich odwołań do sprzętu, “wplecionych” w kod aplikacyjny. W planach była również próba uruchomienia połączenia diagnostycznego, jednak z powodu braku czasu skupiłem się na samym przeportowaniu kodu.

Jaka nauka płynie z dzisiejszej lekcji? Przemyślana struktura kodu wpływa nie tylko na jego czytelności, ale jest też kluczem do uzyskania przenośności kodu między platformami.

Posted in Sto dni w kolorze.