zdeno píše:fulda píše:Pak je potřeba trochu vnímat to, jakým živelným způsobem se specifikace vyvíjí. A pak už se dá docela dobře pochopit proč se příkaz "move slot" používá ke všemu jinému, než k přesouvání slotů a jak to, že se někdy celý slot vejde do jednoho bajtu.
P.S. tak trochu předpokládám, že #BA je nějaké tvoje nejlepší značení které nikdo jiný nechápe pro to, co digitrax značí jako: OPC_MOVE_SLOTS 0xBA
muzes mi toto vysvetlit, ako sa vejde slot do jednoho byte ??
To je velmi jednoduché. Je potřeba se trochu podívat na analogii mezi LocoNetem (dále jen LN) a třeba angličtinou. Jednoduchý předpis (gramatika u té angličtiny) a k tomu nekonečné množství výjimek (a nepravidelností).
{osobní názor}Trochu mám pocit, že LN vznikl jen při diskuzi dvou developerů a vlastně nikdo nečekal, že se bude používat mimo Digitrax. Jen později někoho napadlo "něco" zveřejnit, aby mohl vzniknout třeba ovládací program třetí strany. A protože neexistoval proces pro rozšiřování (neexistující) normy, tak vzniklo ještě více výjimek a nekompatibilit.{/osobní názor}
LN má na svou dobu velmi hezky definovanou datovou strukturu pro ukládání informací o lokomotivě (vím, je to nepřesné označení, ale opis s multifunkčním dekodérem se mi nelíbí). Určitě v té době zásadně zrychlovala a zjednodušovala práci. Nebýt toho, že se pak pokoušel nesystematicky strukturu použít pro všechno možné a nebýt toho, že absolutně nepřipouštěl rozvoj této struktury, mohlo se jednat o celkem dobrý počin. Bohužel, (pravděpodobně díky nesystematickému přístupu kdy nepracovali na "standardu", ale jen si tak tvořili pro sebe) celkem zásadně podcenili něco, co se dnes označuje jako Insert/Update/Delete pro datové struktury (Create/Midify/Delete pro soubory) a definoval jen čtení a zápis pro celou strukturu a pak nepřesnou specifikaci pro přesun, která se vlastně v praxi k přesunu nepoužívá.
A teď důsledky. Digitrax definoval, že sloty 1-119 jsou určené pro ukládání informací o lokomotivách a ostatní jsou určené pro výjimky. Hodně výjimek se věnuje programování (ve smyslu změna CV), některé se věnují rychlému času a jedna se věnuje "dispatch", což je způsob práce s extra primitivními ovladači (například bez displeje).
{osobní názor} definici rychlého času jako takovou a definici práce s primitivními ovladači považuji za velmi chytrý tah {/osobní názor}
Takže vznikl jakýsi neexistující slot s číslem 0, který vlastně není slot, ale je to ukazatel na jiný, opravdový slot. LN se nijak nezabývá detaily skutečné implementace, takže je možné použít několik výkladů. Buď si vyhradíte větší paměťový blok a ukládáte si celou kopii slotu, nebo třeba jen číslo lokomotivy a nebo použijete zcela minimalistickou verzi, kdy si ukládáte opravdu jen ukazatel. A protože celý LN je ve skutečnosti sedmi bitový (viz například čísla slotů 1-119), máte k dispozici ještě celkem dost prostoru pro pár drobných příznaků, než naplníte hodnotu celého bajtu. Vzhledem k tomu, že se slotem 0 se pracuje jinak při čtení, při zápisu a při přesunu (viz další výjimky), tak je použití jednobajtového ukazatele naprosto dostačující a nikdy nedojde ke kolizi.
Je tento popis srozumitelný? Vím, že obsahuje hodně osobních názorů, ale v případě tak nejednoznačné specifikace, jakou LN má se není čemu divit.
Pokud někoho zajímají ještě další detaily a nebojí se zeptat, tak sem s nimi. Jenom upozorním na to, že mám poměrně zvládnutou specifikaci P1, která je více než 20 let stará. Mám načtenou i specifikaci P2, ale nezabýval jsem se jejím detailním rozborem (podle mne za to nestojí) a rozhodně nemám načtené další specifikace jako Uhlenbrock ESU a podobné.