Do dokończenia najnowszego projektu jest mi potrzebna biblioteka do obsługi modułu RFM69 (w moim przypadku RFM69HCW).
Niestety najwyraźniej jak dotąd nie powstała wersja pod AVR-y (albo chociażby pod "czyste" C, z niskopoziomowymi funkcjami do samodzielnego uzupełnienia). Na GitHubie znalazłem jedynie bibliotekę dla Arduino, napisaną w C++. Trzeba będzie ją przerobić. Kod można znaleźć
TUTAJW C++ nigdy nie pisałem niczego bardziej złożonego, ale jestem w stanie zrozumieć sens kodu, poza tym miałem też do czynienia z Arduino, więc myślę, że odróżnię większość poleceń typowych dla środowiska wiring.
Mam jednak kilka pytań, co do kilku kwestii chciałem się też upewnić, zanim stracę czas na wprowadzanie zmian, które potem okażą się zupełnie niepotrzebne.
1) Jak rozumiem, na samym początku powinienem pozbyć się klasy RFM69 i wszystkie zawarte w niej funkcje i uczynić najzwyklejszymi funkcjami języka C, nazywając je np. wedle schematu RFM69_nazwa(). Tylko jak przy okazji tego procesu potraktować funkcje i zmienne o statusie "public" i "protected"? Jakie są ich odpowiedniki w C?
2) Widzę, że niektóre z funkcji mają argumenty już na starcie zainicjowane jakąś wartością, np.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W przypadku C nigdy nie spotkałem się z taką konstrukcją. Czyżby była to właściwość języka C++? Jeśli tak, to w jaki sposób potraktować ją podczas konwersji do C?
3) Defnicja klasy RFM69 w pliku nagłówkowym RFM69.h zawiera następujący fragment (sekcja public):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wygląda jak funkcja, ale jest umieszczona w dość nietypowym miejscu jak na funkcję. Czemu to służy i czym to zastąpić w C?
4) Do czego służy wskaźnik static RFM69* selfPointer?
5) Czy w przypadku C również dopuszczalne jest umieszczenie wśród argumentów funkcji wskaźnika na void, do którego potem podstawia się bufor dowolnego typu? Czy może raczej powinienem się twardo trzymać jednego typu danych, np. uint8_t albo char?
6) W obsługujących transmisję widzę instrukcje odpowiadające za zapisywanie i odtwarzanie konfiguracji SPI (zmienne _SPCR i SPSR). Rozumiem, że nie mając na magistrali żadnego innego urządzenia mogę sobie darować tę część?
7) Dlaczego właściwie w czystym C pod AVR-ami praktycznie nie stosuje się zmiennych bool? Jest to związane z jakąś ważną przyczyną? Powinienem pozamieniać je na uint8_t, czy mogę spokojnie dołączyć odpowiedni plik nagłówkowy i zostawić kod w obecnej postaci.