cieszę się, że ktoś to wyjaśnił w zrozumiały sposób... jako, że jestem programistą, to moje tłumaczenia są... ciężkie dla nie-programistów
ważne że ktoś przetłumaczył z mojego na ludzki język
skoro tak bardzo chcecie tworzyć własne akcje, to opiszę z grubsza jak to wygląda (wszystkie wartości szesnastkowo)
A wiec tak, każda akcja ma postać
Kod: Zaznacz cały
<ilość powtórzeń> <początek> <koniec> <pętla>
gdzie:
- ilość powtórzeń (dwa bajty) - domyślna ilość powtórzeń poleceń w pętli. 0000 oznacza powtarzanie bez końca
- początek - polecenia wykonywane na początku akcji (przed właściwymi elementami do powtórzenia), czyli np jedno piknięcie klaksonu przed właściwą pętlą animacji świateł
- koniec - polecenia wykonywane przy zakończeniu akcji - czyli wyłączenie kontroli nad światłami, tak by auto mogło sobie samo nimi sterować.
- pętla - właściwa pętla poleceń, czyli to co będzie powtarzane określoną ilość razy
początek i koniec mają następujący format:
gdzie
- długość (1 bajt) - długość danych w bajtach lub 00 jeśli na początku/końcu akcji nic się nie dzieje
- właściwe dane - polecenia dla modułu do wykonana
pętla:
gdzie
- ilość poleceń (1 bajt) - ilość poleceń dla modułu. W odróżnieniu od początku i końca, tutaj jest ilość poleceń, a nie rozmiar w bajtach (!)
- dane - polecenia do wykonania
Poleceń dla modułu jest wiele, to te najważniejsze:
- 00 xx - czekaj xx ms (pauza max 255ms)
- 01 xxxx - czekaj xxxx ms (dłuższa pauza), np 01 03E8 - pauza 1000ms (1 sekunda)
- 50 xx yy...yy - sterowanie jakimś układem w UEC, gdzie:
- xx - ilość bajtów - długość danych yy...yy
- yy...yy - dane do wysłanie do UEC
- 51 xx yy...yy - jak wyżej, tylko że dla RECa
Teraz weźmy przykładową akcję:
Kod: Zaznacz cały
0000 00 0E 50050200000000 51050100000000 03 5005023F3F1F1F 510501FCFC0707 0103E8
właściwe bloki/polecenia są już podzielona na logiczne części. I widzimy tutaj:
- 0000 - domyślnie powtarzaj bez końca
- 00 - brak początku akcji
- 0E - koniec akcji tutaj 14 bajtów, dwa polecenia po 7 bajtów
- 03 - ilość poleceń w pętli
- polecenia w pętli
przykładowo: pierwsze polecenie w pętli:
jak widać wysyłamy 5 bajtów do UEC (sterowanie). w praktyce przekłada się to na wysłanie na LSCAN następującego pakietu (i czekanie na odpowiedź)
gdzie
- 06 - długość danych
- AE - to żądanie sterowania jakimś wyjściem UEC
przyda się delikatna znajomość GMLan by to zrozumieć, ew. można przyjąć, że tak po prostu musi być - 02 - "zestaw wyjść" którym chcemy sterować
- dalej faktyczne parametry sterowania, tutaj: 3F 3F - maska bitowa wyjść, którymi chcemy sterować + wartości na tych wyjściach, tak samo 1F 1F
Jak sterować wyjściami?
przede wszystkim musimy znać "blok wyjść" i ilość bajtów jaką musimy wysłać (jak wyślemy źle, to sterownik zwróci błąd. Wymaganych jest 1, 2, 3 lub 4 bajtu (zależnie od sterownika i numeru bloku).
Np: w UEC blok 2 wymaga 4 bajtów:
Co jest w którym bloku i jakiej maski użyć by włączyć np konkretną lampkę, to już temat na później
Kto ma ochotę, może eksperymentować... ale czasem można włączyć jakąś dziwną rzecz i czasami tylko odłączenie akumulatora pozwoli ją wyłączyć, a więc... zalecam ostrożność
Jeśli nie przeraziliście się tym opisem i jest w miarę zrozumiały i nadal chcecie pisać własne akcje... to jutro mogę opisać niektóre bloki, co w nich jest i jak ich użyć to stworzenia własnej animacji
Nie mówię, że opis tych bloków to jakaś tajna wiedza, ale nigdzie w internecie jej nie znajdziecie
ale godziny/dni spędzone w aucie pozwolą na uzyskanie całkiem pokaźnej listy - mogę się podzielić częścią moich zapisków